当遇到 Oracle 用户密码过期又不能重置为新密码该怎么办?

事情是这样的,前几天在墨天轮社区问答区上有个问题 “Oracle 用户密码已经过期,但不知道原密码的情况下,如何解决”?看意思是想让已有的应用使用原来的老密码继续连接,问题前提是不知道原密码,那么该怎么解决呢?肯定是重置密码呀!怎么重置,使用明文密码肯定不行,这里有点小道道,继续往下看吧。

一、重置新密码

当用户 Scott 密码过期后,首先采取的办法就是重置密码,但是,如果你知道原来的密码是什么,没有其他密码策略限制的情况下,那么可以继续重置密码为此,如下示例:

select username,account_status from dba_users where username='SCOTT';


USERNAME           ACCOUNT_STATUS
------------------------------ --------------------------------
SCOTT             EXPIRED


ALTER USER SCOTT IDENTIFIED BY SCOTT;
--然后设置密码过期策略无限制
ALTER PROFILE DEFAULT limit FAILED_LOGIN_ATTEMPTS UNLIMITED PASSWORD_LIFE_TIME UNLIMITED;

还有一种情况就是重置此用户密码时不知道原密码是什么,重置为一个新密码后,涉及到的所有应用都需要修改密码,对于过于复杂的老系统,涉及到的应用又比较多,如要改密码则是牵一发而动全身,所以也就很少改密码。

当遇到密码过期后,有些项目组是不希望修改为新密码的,不想动应用想继续用原来的老密码(当然这是不安全的,对于重要的系统建议定期修改密码)。但是和你对接的项目组人暂时又不知道原密码是啥,应用连接串里又配置的是密文,没法查看密码或者密码丢失。

在这种情况下,希望重置为原来的密码,当然也是可以的,应该有两种方案可以使用,演示如下:

二、重置为原密码

Oracle 11g 的密码密文存在 user$ 的 password 字段,我们可以关联 dba_users 和 user$ 表查看 password 列的密码密文。

062833a3beab455c8a38cca6470ef468.png

现在将新改为 tiger 的 Scott 用户密码过期,然后我们通过 user$ 的 password 字段值来修改一下密码。

SQL> alter user scott password expire;


User altered.


SQL> select username,account_status,u.password from dba_users d,user$ u where d.username=u.name and  d.username='SCOTT';


USERNAME                       ACCOUNT_STATUS                   PASSWORD
------------------------------ -------------------------------- ------------------------------
SCOTT                          EXPIRED                          F894844C34402B67


SQL> alter user scott identified by values 'F894844C34402B67';


User altered.

ff1f78349fd7e09b034c2a4fad522e70.png

记得以前在项目组的时候,业务要求将测试某一个用户的密码改为何生产用户一样的密码,但又不知道生产用户的明文密码,这就很难办了,只能在生产上查询此用户的密文拿过来改到测试环境,如下示例:

SQL> select NAME,PASSWORD,SPARE4 from  user$ where name='SCOTT';


NAME                           PASSWORD
------------------------------ ------------------------------
SPARE4
--------------------------------------------------------------------------------
SCOTT                          CDC57F9E62A38D03
S:3BF46B2AC692CD7CD80082CB6C7C4B1C323F8A0CE044F1B477ADE2BE807E




alter user scott identified by values 'S:3BF46B2AC692CD7CD80082CB6C7C4B1C323F8A0CE044F1B477ADE2BE807E';
或者
alter user scott identified by values 'CDC57F9E62A38D03';

9155cec45085119b99af7dade4d97ab7.png

如上,PASSWORD 和 SPARE4 列的密文都可以拿来重置密码,在他的问题中我是采用获取 DDL 创建用户的语句来获取密码的是 VALUES 后面以 “S” 开头的就是密码密文,不过注意看,这里获取到的是 PASSWORD 和 SPARE4 列的密文并以分号分割开来,拿来直接用就行不用分开也行,如下示例:

SQL> set line 456 pages 9999 long 9999
SQL> select dbms_metadata.get_ddl('USER','SCOTT') from dual;


DBMS_METADATA.GET_DDL('USER','SCOTT')
--------------------------------------------------------------------------------


   CREATE USER "SCOTT" IDENTIFIED BY VALUES 'S:142DB0E3EA4D
11294B1296218ACD830E20888454AA02B3DF82C7
BE902ECE;CDC57F9E62A38D03'
      DEFAULT TABLESPACE "USERS"
      TEMPORARY TABLESPACE "TEMP"
SQL> conn scott/scott
Connected.
SQL> conn / as sysdba 
Connected.
SQL> alter user scott identified by tiger;


User altered.


SQL> conn scott/tiger
Connected.
SQL> conn / as sysdba
Connected.


SQL> alter user scott identified by VALUES 'S:142DB0E3EA4D11294B1296218ACD830E20888454AA02B3DF82C7BE902ECE;CDC57F9E62A38D03';


User altered.


SQL> conn scott/scott
Connected.

这里也不知道这个密码加密算法是什么,逻辑在哪里,分开用,一起用重置密码均可以,但就是重置后也不知道明文密码是啥,就这点还有点苦恼。

三、19c 中密码的差异

在 Oracle 19c 的表 USER$ 列 password 有时候是空的,那么就可以用 SPARE4 字段的值,DDL 获取创建用户的语句中 Values 就和 SPARE4 的值一样,示例如下:

$ sqlplus / as sysdba


SQL*Plus: Release 19.0.0.0.0 - Production on Thu May 19 10:47:44 2022
Version 19.12.0.0.0


Copyright (c) 1982, 2021, Oracle.  All rights reserved.


Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.12.0.0.0
SQL> select dbms_metadata.get_ddl('USER','DBZUSER') from dual;


DBMS_METADATA.GET_DDL('USER','DBZUSER')
--------------------------------------------------------------------------------


   CREATE USER "DBZUSER" IDENTIFIED BY VALUES 'S:39FF8B00F2
63D067EF506F58798275FF0291D7EC8EB63D8C57
08806D0C07;T:CBE28DB056745AAABE8B4228E0B
50F516FBCADB0D295F691F4D211F062D4F1380BC
CD3D4F83E0CF96FDDD2479C3D89EFCA3DC9AD1B7
0FA9F2B16C42F75AC5A6CD3CFE8EC1DAA8441BC4
A12B338845F72'
      DEFAULT TABLESPACE "LOGMINER_TBS"
      TEMPORARY TABLESPACE "TEMP"
      PASSWORD EXPIRE




Elapsed: 00:00:01.37
SQL> alter user DBZUSER  IDENTIFIED BY 
10:44:16   2  VALUES 'S:39FF8B00F263D067EF506F58798275FF0291D7EC8EB63D8C5708806D0C07;T:CBE28DB056745AAABE8B4228E0B50F516FBCADB0D295F691F4D211F062D4F1380BCCD3D4F83E0CF96FDDD2479C3D89EFCA3DC9AD1B70FA9F2B16C42F75AC5A6CD3CFE8EC1DAA8441BC4A12B338845F72';


User altered.


Elapsed: 00:00:00.93
SQL> conn DBZUSER/dbzuser
Connected.


SQL> conn / as sysdba
SQL> col SPARE4 for a250
SQL> set line 288
SQL> select NAME,PASSWORD,SPARE4 from  user$ where name='DBZUSER';


NAME         PASSWORD     SPARE4
------------ ------------ ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
DBZUSER                   S:39FF8B00F263D067EF506F58798275FF0291D7EC8EB63D8C5708806D0C07;T:CBE28DB056745AAABE8B4228E0B50F516FBCADB0D295F691F4D211F062D4F1380BCCD3D4F83E0CF96FDDD2479C3D89EFCA3DC9AD1B70FA9F2B16C42F75AC5A6CD3CFE8EC1DAA8441BC4A12B338845F72

好了,今天就先这样吧,朋友们如有其他不同见解,欢迎一起来交流、讨论。全文完,希望可以帮到正在阅读的你,如果觉得有帮助,可以分享给你身边的朋友,同事,你关心谁就分享给谁,一起学习共同进步~~~

❤️ 欢迎关注我的公众号,来一起玩耍吧!!!

————————————————————————————
公众号:JiekeXu DBA之路
墨天轮:https://www.modb.pro/u/4347
CSDN :https://blog.csdn.net/JiekeXu
腾讯云:https://cloud.tencent.com/developer/user/5645107
————————————————————————————

f15c2a7423e89e6251ad5eca9d5f62c9.gif

Oracle 表碎片检查及整理方案

2021 年公众号历史文章合集整理

2020 年公众号历史文章合集整理

我的 2021 年终总结和 2022 展望

Oracle 19c  RAC 遇到的几个问题

Oracle 查询表空间使用率超慢问题一则

国产数据库|TiDB 5.4 单机快速安装初体验

Oracle ADG 备库停启维护流程及增量恢复

Linux 环境搭建 MySQL8.0.28 主从同步环境

Oracle 19c 使用数据泵如何导入导出 PDB 用户

64b4e417d345f9d5ee37074ba26f4be8.png

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值