FAILED_LOGIN_ATTEMPTS для пользователей которые логинятся через Proxy User

Proteus
Дата: 04.12.2012 18:02:44
Правильно ли я понимаю что этот параметр не работает в случае соединения через прокси пользователя
http://docs.oracle.com/cd/E11882_01/network.112/e16543/authentication.htm
When you set this parameter, take into consideration users who may log in using the CONNECT THROUGH privilege.

А что делать если нужно при подключении через прокси пользователя реализовать функцию блокирования аккаунта пользователя после определенного числа неправильного ввода пароля?
ILoveCoffee
Дата: 05.12.2012 08:12:52
Proteus,

Блокировать прокси или дестинейшн пользователя ?

SYS@VALAPEX 05-DEC-12> create profile proxy limit failed_login_attempts 3;

Profile created.

SYS@VALAPEX 05-DEC-12> create user uprx1 identified by u1 profile proxy;

User created.

SYS@VALAPEX 05-DEC-12> create user u1 identified by u1;

User created.

SYS@VALAPEX 05-DEC-12> grant connect to u1;

Grant succeeded.

SYS@VALAPEX 05-DEC-12> alter user u1 grant connect through uprx1;

User altered.

SYS@VALAPEX 05-DEC-12> connect uprx1[u1]/u1
Connected.
U1@VALAPEX 05-DEC-12> connect uprx1[u1]/u
ERROR:
ORA-01017: invalid username/password; logon denied

....
....

@ 05-DEC-12> connect uprx1[u1]/u
ERROR:
ORA-28000: the account is locked

SYS@VALAPEX 05-DEC-12> select username, lock_date from dba_users where username in ('U1', 'UPRX1');

USERNAME                       LOCK_DATE
------------------------------ ---------
U1
UPRX1                          05-DEC-12

SYS@VALAPEX 05-DEC-12>
Proteus
Дата: 05.12.2012 10:30:36
Именно пользователя.
В пароле прокси ошибиться нельзя. Под ним изначально создается пул соединений приложения. А когда пользователи этого приложения логинятся вот тут они могут ошибаться (или подбирать пароль), за это, после 3 неправильных вводов их и нужно блокировать этого пользователя.

Неужели придется самому реализовывать.
Proteus
Дата: 05.12.2012 10:32:20
По твоему примеру именно U1 должен быть заблокирован.
ILoveCoffee
Дата: 05.12.2012 11:46:07
Proteus,

Почему ?
ILoveCoffee
Дата: 05.12.2012 11:54:47
ILoveCoffee
Proteus,
Proteus
По твоему примеру именно U1 должен быть заблокирован.


Почему ?


А, это скорее всего ответ на :
автор
Блокировать прокси или дестинейшн пользователя


что нужно блокировать дестинейшн пользователя (u1)
ILoveCoffee
Дата: 05.12.2012 12:21:35
Proteus
По твоему примеру именно U1 должен быть заблокирован.


Сделать еще одного прокси юзера для аппликейшен пула, в случае, если пароль будет вводиться не верный, пользователь-пулл(прокси) заблокируется, это предотвратит блокировку критичной учетной записи вашего аппликейшна (все механизмы в бд будут работать) ?
dba123
Дата: 05.12.2012 13:10:59
Proteus
Правильно ли я понимаю что этот параметр не работает в случае соединения через прокси пользователя
http://docs.oracle.com/cd/E11882_01/network.112/e16543/authentication.htm
When you set this parameter, take into consideration users who may log in using the CONNECT THROUGH privilege.

А что делать если нужно при подключении через прокси пользователя реализовать функцию блокирования аккаунта пользователя после определенного числа неправильного ввода пароля?
параметр работает, но только из профиля учетной записи прокси, а не пользователя
из профиля пользователя u1 берется (все не проверял):
SESSIONS_PER_USER
CONNECT_TIME
IDLE_TIME
и юзер не должен быть заблокирован конечно

упорядочим:
1. proxy_app/proxypwd
- может даже не иметь привилегии create session
- должен иметь свой профиль
- должен иметь свой пароль

2. u1/u1 пользователь
- должен иметь привилегию "работать proxy_app от моего имени"
alter user u1 grant connect through proxy_app; -- с установкой ролей или без оных
- должен иметь привилегию create session
- должен иметь свой профиль или общий

3. само подключение: вводится пароль только прокси
connect proxy_app[u1]/proxypwd@orcl

всё что касается паролей берется из профиля proxy_app
остальное - из профиля u1

и здесь никак не получиться ввести не тот пароль
если вы разрешите юзеру вводить именно этот proxypwd, то он может работать от любой уч. записи, имеющей
connect through

а неправильный ввод пароля заблокирует только proxy_app, как иначе, ведь пароль вводится не пользователя

если надо проверить его пароль, не устарел ли ... и т.д., то это надо делать (пока надеюсь) до прокси подключения, напрямую
Proteus
Дата: 05.12.2012 13:29:11
Наверное я не правильно объяснил.
Для того что бы пул соединений мог реюзатся он открывается под прокси пользователем. (по примеру это пользователь uprx1 )
Properties poolconfig = new Properties();
      poolconfig.setProperty(OracleOCIConnectionPool.CONNPOOL_MIN_LIMIT, CONNPOOL_MIN_LIMIT);
      poolconfig.setProperty(OracleOCIConnectionPool.CONNPOOL_MAX_LIMIT, CONNPOOL_MAX_LIMIT);
      poolconfig.setProperty(OracleOCIConnectionPool.CONNPOOL_INCREMENT, CONNPOOL_INCREMENT);
      poolconfig.setProperty(OracleOCIConnectionPool.CONNPOOL_TIMEOUT, CONNPOOL_TIMEOUT);

      ociPool = new OracleOCIConnectionPool(dbUser,dbPass,dbUrl, poolconfig);


Когда производятся какие либо действия от лица конечного пользователем то из пула получается одно соединение и оно переключается под конечного пользователя ( u1)

      Properties theProps = new Properties();
      theProps.put(OracleOCIConnectionPool.PROXY_USER_NAME, login);
      theProps.put(OracleOCIConnectionPool.PROXY_PASSWORD, pass);
      if (roles != null)theProps.put(OracleOCIConnectionPool.PROXY_ROLES, roles);
      conn = (Connection) ociPool.getProxyConnection(OracleOCIConnectionPool.PROXYTYPE_USER_NAME, theProps);


После этого сессия со стороны базы выполняется под пользователем U1.

Задача заблокировать пользователя U1 если он 3 раза ввел не правильный пароль. При этом пользователь uprx1 должен остаться не заблокированным.

Я попытался решить это настроив профиль для пользователя U1 c указанием лимита на неправильный ввод. Но наткнулся на то что если входить U1 и ввести 3 раза не правильный пароль то он блокируется как и должно быть, но если U1 коннектится через uprx1 то блокировка не наступает. Вопрос собственно был в том что же делать? И похоже придется реализовывать этот механизм самому ведя где то счетчик неудачных попыток для каждого пользователя и блокируя его если он превысил допустимый предел.
Proteus
Дата: 05.12.2012 13:40:44
dba123,

Все ты правильно говоришь.
Все именно так и в sqlplus нет возможности задавать при соединении 2 пароля и прокси пользователя и учетки конечного пользователя. Но в Jave эта возможность есть.
conn = (Connection) ociPool.getProxyConnection(OracleOCIConnectionPool.PROXYTYPE_USER_NAME, theProps);

Через параметры передается не только PROXY_USER_NAME от имени кого будет работать данная сессия но и пароль этой учетки. Oracle проверяет и пароль и все другие ограничения и в случае неправильного пароля возвращает ошибку, но как бы сказать, не относит ее на счет ошибки совершенной этим пользователем и не блокирует его аккаунт. Как мне показалось.