Oracle identified by values

有时候需要使用user的密码,却不知道user密码是什么,我常常使用如下把戏
1.记录密码hash值
2.更改为自己的密码
3.使用完后,利用identified by values 更改回原来的密码
在oracle 10g的时候,密码是hash后存放在dba_users的password栏位,可以

SELECT 'ALTER USER DBAS IDENTIFIED BY VALUES '||''''||PASSWORD||''''||';' FROM DBA_USERS WHERE USERNAME='DBAS';

在这里插入图片描述
11G分为两种情况
1.旧有的账号仍然存放hash value在user$的password栏位,这里旧有的账号通常从旧系统搬移过来,如exp/imp方式,对于这种清况,仍然可以使用passwod栏位存放的hash value去更改回原来的密码,但是dba_users内的password的栏位不再有密码的hash value,
在这里插入图片描述

因此要稍稍修改一下上述sql
SELECT 'ALTER USER DBAS IDENTIFIED BY VALUES '||''''||PASSWORD||''''||';' FROM SYS.USER$ WHERE NAME='DBAS'; 在这里插入图片描述

2.新创建账户的密码增加了salt value,存放于user$表的spare4栏位,密码hash value仍然存放于password值,因此新的密码完整的hash value将是的组合。

SELECT 'ALTER USER DBAS IDENTIFIED BY VALUES '||''''||SPARE4||';'||PASSWORD||''''||';' FROM SYS.USER$ WHERE NAME='DBAS';

在这里插入图片描述
Oracle 12c 引入了新功能,使用户 ID/密码哈希值更加安全。 12c 安全指南中讨论了用于密码的 12c 验证程序。在该部分中,它提到了在对密码进行哈希处理时添加到密码中的盐值(salt value)。
Oracle identified by values_第1张图片
在以前的版本中,SPARE4 列几乎不会包含那么多字符。 这绝对比 12c 之前的版本更复杂。 我的猜测虽然未经证实,但 S: 上面输出的一部分是盐值。 我不确定 H: 和 T: 代表什么。
我们可以使用 DBMS_METADATA 包对用户进行逆向工程。 当我们这样做时,我们可以看到我们仍然可以使用 IDENTIFIED BY VALUES 子句。
Oracle identified by values_第2张图片
需要注意的是,当尝试使用 exp/imp 或 Data Pump 将用户从 12c 之前的版本迁移到 12c 时, 如果您完全导出 Oracle 11g 数据库,则转储将包含旧密码哈希值。 导入 12c 时,您将收到 ORA-02153 错误。 要解决此问题,这时需要在 12c 数据库中使用已知密码预先创建用户。

你可能感兴趣的:(Oracle,数据库,oracle)