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
谢谢!
最佳答案
是的,这是从 Oracle 9i 开始支持的,当时引入了一个功能来检查新密码的复杂性,并可选择检查与旧密码的差异。由于 Oracle 仅存储散列值而不存储密码,因此它无法比较旧密码和新密码,除非用户在更改期间提供它。
因此,所有具有设置了 PASSWORD_VERIFY_FUNCTION
的 PROFILE
的用户都需要使用旧密码,即使此功能不检查任何密码也是如此:
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
,但这仅适用于管理员,因为他们可以更改所有帐户的所有密码。
关于database - 为 Oracle 中的特定用户设置新密码时需要旧密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50676642/