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将是<spare4;password>的组合。

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

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值