Требовать старый пароль при установке нового пароля для конкретного пользователя в 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
тем пользователям, которые должны предоставить старый пароль (и отозвать у него системную привилегию изменения пароля).