Требовать старый пароль при установке нового пароля для конкретного пользователя в Oracle

Поддерживает ли 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 ответа

Да, это поддерживается начиная с 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, но это только для администраторов, так как они могут изменять все пароли всех учетных записей.

Документ Oracle говорит

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

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

Другие вопросы по тегам