Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 После N попыток логина сделать таймаут подключения  [new]
NNN2
Guest
Здравствуйте.

Пользователь пытается подключиться N раз, вводя неправильный пароль. Надо сделать так, чтоб после N-й попытки все последующие были с таймаутом(скажем, 5 сек). Блокировать юзера не надо.
Как этого добиться?
3 апр 08, 21:09    [5501480]     Ответить | Цитировать Сообщить модератору
 Re: После N попыток логина сделать таймаут подключения  [new]
Сергей Дорошенко
Member

Откуда: киев
Сообщений: 224
password_lock_time?
TRIGGER AFTER LOGON ON DATABASE + dbms_lock.sleep(XXXX)?
3 апр 08, 21:23    [5501502]     Ответить | Цитировать Сообщить модератору
 Re: После N попыток логина сделать таймаут подключения  [new]
NNN2
Guest
1) password_lock_time измеряется в днях, в данном же случае нужен таймаут в неск. секкунд
2) LOGON ON DATABASE будет после успешного логина, а речь о неудачных попытках
3 апр 08, 21:31    [5501522]     Ответить | Цитировать Сообщить модератору
 Re: После N попыток логина сделать таймаут подключения  [new]
Leonid Gurevich
Member

Откуда:
Сообщений: 2215
NNN2
1) password_lock_time измеряется в днях, в данном же случае нужен таймаут в неск. секкунд

Но дни могут быть дробями. Т.е. 1/24 - один час, 1/24/60 - одна минута и т.д.
3 апр 08, 21:37    [5501535]     Ответить | Цитировать Сообщить модератору
 Re: После N попыток логина сделать таймаут подключения  [new]
stdio
Member

Откуда:
Сообщений: 4524
NNN2
Здравствуйте.

Пользователь пытается подключиться N раз, вводя неправильный пароль. Надо сделать так, чтоб после N-й попытки все последующие были с таймаутом(скажем, 5 сек). Блокировать юзера не надо.
Как этого добиться?
Никак. Какой смысл в этой фенечке? Какую политику безопасности мы пытаемся ей реализовать?
3 апр 08, 21:45    [5501552]     Ответить | Цитировать Сообщить модератору
 Re: После N попыток логина сделать таймаут подключения  [new]
Сергей Дорошенко
Member

Откуда: киев
Сообщений: 224
NNN2
1) password_lock_time измеряется в днях, в данном же случае нужен таймаут в неск. секкунд
2) LOGON ON DATABASE будет после успешного логина, а речь о неудачных попытках


не проверял, взято с psoug:

-- to count failed log in attempts:
SELECT name, lcount
FROM user$
WHERE lcount <> 0

а задержку надо ставить как раз после успешного логина.

только действительно, ответьте на вопрос stdio: зачем оно вам?
3 апр 08, 22:12    [5501596]     Ответить | Цитировать Сообщить модератору
 Re: После N попыток логина сделать таймаут подключения  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 10042
stdio
Никак. Какой смысл в этой фенечке? Какую политику безопасности мы пытаемся ей реализовать?


Well, I am not questioning смысл в этой фенечке, but it is possible. Code below (I posted it years ago Тема: триггер на событие "Ошибка доступа к БД") locks users who unsuccessfully tried to login more than 3 times within 2 minute interval and keeps log of every unsuccessful login in INTRUDER table. Solution requires database auditing enabled (AUDIT_TRAIL = DB or AUDIT_TRAIL = TRUE in INIT.ORA) and AUDIT SESSION or at least AUDIT SESSION WHENEVER NOT SUCCESSFUL. Solution is based on one table and two database triggers: AFTER SERVERERROR and AFTER LOGON:


SQL> connect system/xxx
Connected.

SQL> CREATE TABLE intruder(username VARCHAR2(30),
 2 timestamp DATE,
 3 locked NUMBER
 4 )
 5 /

Table created.

SQL> CREATE OR REPLACE
 2 TRIGGER marker
 3 AFTER SERVERERROR ON DATABASE
 4 DECLARE
 5 max_breach_attempts CONSTANT NUMBER := 3;
 6 breach_window CONSTANT NUMBER := 2/1440 ; -- 2 minutes
 7 
 8 intruder_name VARCHAR2(30);
 9 breach_attempt_timestamp DATE;
 10 number_of_breach_attempts NUMBER;
 11 user_is_locked NUMBER;
 12 
 13 BEGIN
 14 IF IS_SERVERERROR(1017)
 15 THEN
 16 SELECT username,
 17 timestamp
 18 INTO intruder_name,
 19 breach_attempt_timestamp
 20 FROM dba_audit_session
 21 WHERE sessionid = userenv('sessionid');
 22 INSERT
 23 INTO system.intruder
 24 SELECT intruder_name,
 25 breach_attempt_timestamp,
 26 DECODE(SIGN(COUNT(*) - max_breach_attempts),
 27 -1,0,
 28 1
 29 )
 30 FROM system.intruder
 31 WHERE username = intruder_name
 32 AND timestamp BETWEEN breach_attempt_timestamp - breach_window AND breach_attempt_timestamp;
 33 COMMIT;
 34 SELECT MAX(locked)
 35 INTO user_is_locked
 36 FROM system.intruder
 37 WHERE username = intruder_name;
 38 IF user_is_locked != 0
 39 THEN
 40 RAISE_APPLICATION_ERROR(-20999,'Your account is on intruder alert. Please contact Security Administrator or DBA');
 41 END IF;
 42 END IF;
 43 END;
 44 /

Trigger created.

SQL> CREATE OR REPLACE
 2 TRIGGER bouncer
 3 AFTER LOGON ON DATABASE
 4 DECLARE
 5 user_is_locked NUMBER;
 6 BEGIN
 7 SELECT MAX(locked)
 8 INTO user_is_locked
 9 FROM system.intruder
 10 WHERE username = USER;
 11 IF user_is_locked != 0
 12 THEN
 13 RAISE_APPLICATION_ERROR(-20999,'Your account is on intruder alert. Please contact Security Administrator or DBA');
 14 END IF;
 15 END;
 16 / 

Trigger created.

SQL> connect abc/abc
Connected.
SQL> connect abc/ab
ERROR:
ORA-01017: invalid username/password; logon denied


Warning: You are no longer connected to ORACLE.
SQL> connect abc/ab
ERROR:
ORA-01017: invalid username/password; logon denied


SQL> connect abc/ab
ERROR:
ORA-01017: invalid username/password; logon denied


SQL> connect abc/ab
ERROR:
ORA-00604: error occurred at recursive SQL level 1
ORA-20999: Your account is on intruder alert. Please contact Security
Administrator or DBA
ORA-06512: at line 37
ORA-01017: invalid username/password; logon denied


SQL> connect abc/abc
ERROR:
ORA-00604: error occurred at recursive SQL level 1
ORA-20999: Your account is on intruder alert. Please contact Security
Administrator or DBA
ORA-06512: at line 10


SQL> connect system/xxx
Connected.
SQL> update intruder set locked=0 where username='ABC';

4 rows updated.

SQL> commit;

Commit complete.

SQL> connect abc/abc
Connected.
SQL> 

I believe it can be easily modified так, чтоб после N-й попытки все последующие были с таймаутом(скажем, 5 сек).

SY.
3 апр 08, 23:56    [5501877]     Ответить | Цитировать Сообщить модератору
 Re: После N попыток логина сделать таймаут подключения  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 18483
Тот же DBMS_LOCK.SLEEP в этом же триггере перед выдачей ошибки?
4 апр 08, 03:52    [5502069]     Ответить | Цитировать Сообщить модератору
 Re: После N попыток логина сделать таймаут подключения  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 10042
Вячеслав Любомудров
Тот же DBMS_LOCK.SLEEP в этом же триггере перед выдачей ошибки?


Yeap, in AFTER SERVERERROR trigger. AFTER LOGON is not even needed, unless NNN2 wants to punish or to forgive user even if he/she finally remembers the password :).

SY.
4 апр 08, 04:36    [5502076]     Ответить | Цитировать Сообщить модератору
 Re: После N попыток логина сделать таймаут подключения  [new]
I00N
Member

Откуда:
Сообщений: 454
SY
Спасибо за хороший пример
4 июн 08, 23:12    [5761634]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить