在Oracle中为特定用户设置新密码时需要旧密码

时间:2018-06-04 08:47:14

标签: database oracle oracle12c change-password

在将密码更改为特定用户时,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 :(得分: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(并从中撤消密码更改系统权限)。