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

标签 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

谢谢!

最佳答案

是的,这是从 Oracle 9i 开始支持的,当时引入了一个功能来检查新密码的复杂性,并可选择检查与旧密码的差异。由于 Oracle 仅存储散列值而不存储密码,因此它无法比较旧密码和新密码,除非用户在更改期间提供它。

因此,所有具有设置了 PASSWORD_VERIFY_FUNCTIONPROFILE 的用户都需要使用旧密码,即使此功能不检查任何密码也是如此:

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/

相关文章:

node.js - Node OracleDB 连接在远程服务器中不起作用

oracle - Oracle运算符<>在varchar2中不起作用

sql - Oracle始终获取具有标识的插入行的ID

database - 关系代数中的投影

mysql - utf-8 与 latin1

database - oracle中没有 "Cube"函数怎么写查询?

oracle - 计算表中的记录并使用游标更新表

sql - 这可以在 Oracle SQL 中计算 p 值吗?

java - Spring Boot schema.sql,使用PL/SQL初始化数据库

database - ORA-28115 : policy with check option violation