Как заблокировать учетные записи после определенного количества попыток входа - PullRequest
0 голосов
/ 31 марта 2019

У меня есть схема аутентификации в моем приложении oracle apex.У меня также есть имя пользователя и пароли конечных пользователей, хранящиеся в базе данных.Поэтому, когда пользователь входит в систему, он использует свое имя пользователя и пароль, которые он сделал (я не делаю никакой учетной записи для пользователя).Я хочу настроить его так, чтобы учетные записи блокировались, если они делают слишком много неверных попыток входа в систему (которые я должен иметь возможность разблокировать).

Из того, что я исследовал, единственное, что я могу найти, это что-то, связанное с экспресс-администрированием, но я все еще не знал, как это помогло, и не смог найти эту страницу в моем приложении-оракуле.Я также не хочу, чтобы что-то усложнялось, возможно, что-то, что находится на вершине, а не в коде (так как я не настолько хорош в понимании функций / логических значений и т. Д.).

1 Ответ

2 голосов
/ 31 марта 2019

Для аутентификации учетной записи приложения Express, Он применяется к учетным записям конечных пользователей, созданным с использованием интерфейса управления учетными записями конечных пользователей Application Express.

Войдите в рабочее пространство Internal и перейдите к Manage Instance > Security > Authentication Control, перейдите к Development Environment Settings и установите для Require User Account Expiration and Locking значение Да. enter image description here

Для пользовательской аутентификации, я надеюсь, что вы можете зарегистрировать попытки недопустимых пользователей в таблице журнала и ограничить / заблокировать пользователей на основе количества последовательных попыток недопустимых входов в систему.

Ниже пример кода основан на ссылке при условии

Создать таблицу USER_LOG для регистрации недопустимых попыток, как показано ниже

create table USER_LOG (username varchar2(4000), 
                       login_failed_count number, updated_on date);

Измените существующий table1 и добавьте флаг (Y - Да, пользователь заблокирован, N - Нет, пользователь не заблокирован) для блокировки пользователя, как показано ниже.

Alter table table1 add is_locked varchar2(1) default 'N';

После внесения вышеуказанных изменений вы можете попробовать выполнить приведенную ниже обновленную процедуру, приведенную в ссылке.

create or replace function Table1Authenticate( p_username varchar2, p_password varchar2 ) return boolean is  
   i integer;  
   l_rcnt number;
   l_failed_cnt number;
   l_max_failed_cnt number :=4;
   l_lock_flag varchar2(1);
begin     
    select  count(1)  into l_rcnt 
     from table1 t1  
     where t1.username = p_username  
     and   t1.password = p_password;

       if (l_rcnt > 0) then
          select is_locked into l_lock_flag from table1 where username = p_username
          and password = p_password;

          if (l_lock_flag ='N') then
             delete from USER_LOG where username=p_username;
             return true;
          elsif (l_lock_flag ='Y') then 
            apex_util.set_custom_auth_status (p_status => 'Account Locked, Exceeded Maximum Attempts..!');
            return false;
          end if;
       else
           merge into USER_LOG u
           using dual l
           on (u.username=p_username)
             when matched then
                update set login_failed_count=login_failed_count+1,updated_on=sysdate 
             when not matched then
                insert (username,login_failed_count,updated_on) values
                (p_username,1,sysdate);

           select login_failed_count into l_failed_cnt 
           from user_log where username =p_username;
              if (l_failed_cnt > l_max_failed_cnt) then
                 update table1 set is_locked='Y' where username=p_username;
              end if;
            return( false );  
       end if;
   exception when others then  
           return( false );  
end;  

Чтобы разблокировать пользователя, обновите is_locked в table1 с Y до N. Пожалуйста, проверьте с несколькими сценариями, прежде чем использовать его. Надеюсь, это поможет вам.

...