Для аутентификации учетной записи приложения Express,
Он применяется к учетным записям конечных пользователей, созданным с использованием интерфейса управления учетными записями конечных пользователей Application Express.
Войдите в рабочее пространство Internal
и перейдите к Manage Instance > Security > Authentication Control
, перейдите к Development Environment Settings
и установите для Require User Account Expiration and Locking
значение Да.
Для пользовательской аутентификации, я надеюсь, что вы можете зарегистрировать попытки недопустимых пользователей в таблице журнала и ограничить / заблокировать пользователей на основе количества последовательных попыток недопустимых входов в систему.
Ниже пример кода основан на ссылке при условии
Создать таблицу 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
. Пожалуйста, проверьте с несколькими сценариями, прежде чем использовать его. Надеюсь, это поможет вам.