在将密码更改为特定用户时,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
谢谢!
答案 0 :(得分:2)
是的,从Oracle 9i开始支持这一功能,当时引入了一个功能,用于检查新密码的复杂性以及可选的旧密码差异。由于Oracle只存储哈希值而不存储密码,因此除非用户在更改过程中提供密码,否则无法比较旧密码和新密码。
因此,设置了PROFILE
的{{1}}的所有用户都需要使用旧密码,即使此功能没有检查任何密码:
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.
,但这仅适用于管理员,因为他们可以更改所有帐户的所有密码。
答案 1 :(得分:0)
Oracle docu说
如果您是第一次设置自己的密码,或者您具有ALTER USER系统权限并且您要更改其他用户的密码,则可以省略REPLACE子句。但是,除非您具有ALTER USER系统特权,否则必须始终指定REPLACE子句,如果已启用密码复杂性验证功能...
所以答案是 - 向应该提供旧密码的用户添加password verification function
(并从中撤消密码更改系统权限)。