Требовать старый пароль при установке нового пароля для конкретного пользователя в Oracle - PullRequest
0 голосов
/ 04 июня 2018

Поддерживает ли Oracle 12 наличие старого пароля, необходимого при смене пароля для конкретного пользователя?

Что бы я хотел:

ALTER USER user_a IDENTIFIED BY secret123;
-- ERROR, missing old password

ALTER USER user_a IDENTIFIED BY secret456 REPLACE secret123;
-- OK

ALTER USER user_b IDENTIFIED BY secret789;
-- OK, since user_b does not require old password when changing it

Спасибо!

Ответы [ 2 ]

0 голосов
/ 04 июня 2018

Да, это поддерживается со времени Oracle 9i, когда была введена функция, которая проверяет новый пароль на сложность и, в случае необходимости, на отличие от старого пароля.Так как Oracle хранит только хэши, а не пароли, он не может сравнивать старые и новые пароли, если пользователь не предоставит их во время изменения.

Таким образом, требуются все пользователи с PROFILE, для которого установлен PASSWORD_VERIFY_FUNCTION.чтобы иметь старый пароль, даже если эта функция не проверяет пароли:

CREATE OR REPLACE FUNCTION always_true (
  username     VARCHAR2, 
  password     VARCHAR2, 
  old_password VARCHAR2) RETURN boolean IS
BEGIN
  RETURN TRUE;
END always_true;
/

CREATE PROFILE always_true 
  LIMIT PASSWORD_VERIFY_FUNCTION always_true;

CREATE USER user_a IDENTIFIED BY secret123 PROFILE always_true;
GRANT CREATE SESSION to user_a;

Теперь user_a должен указать старый пароль:

ALTER USER user_a IDENTIFIED BY secret123;
ORA-28221: REPLACE not specified

ALTER USER user_a IDENTIFIED BY secret456 REPLACE secret123;
User altered.

Пользователь спрофиль без PASSWORD_VERIFY_FUNCTION или для этого параметра, установленного на NULL, необязательно указывать старый пароль:

CREATE PROFILE without_function 
  LIMIT PASSWORD_VERIFY_FUNCTION NULL;

CREATE USER user_b IDENTIFIED BY secret123 PROFILE without_function;
GRANT CREATE SESSION to user_b;

Теперь user_b может изменить свой пароль, не имея старого пароля:

ALTER USER user_b IDENTIFIED BY secret789;
User altered.

Второй вариант - иметь привилегию ALTER USER, но это только для администраторов, поскольку они могут изменять все пароли всех учетных записей.

0 голосов
/ 04 июня 2018

Oracle document говорит

Вы можете опустить предложение REPLACE, если вы впервые устанавливаете свой пароль или у вас есть системная привилегия ALTER USER, и вы меняетепароль другого пользователя.Однако, если у вас нет системной привилегии ALTER USER, вы всегда должны указывать предложение REPLACE, если включена функция проверки сложности пароля ...

, поэтому ответом будет - добавьте password verification functionтем пользователям, которые должны предоставить старый пароль (и отозвать у них системную привилегию для изменения пароля ).

...