事情是这样的,前几天墨天轮上问答区有个问题 “oracle 用户密码已经过期,但不知道原密码的情况下,如何解决”?那么该怎么解决呢?肯定是重置密码呀?
一、重置新密码
当用户 scott 密码过期后,首先采取的办法就是重置密码,但是,如果你知道原来的密码是什么,没有其他密码策略限制的情况下,那么可以继续重置密码为此,如下示例:
alter user scott identified by scott;
--然后设置密码过期策略无限制
alter profile default limit failed_login_attempts unlimited password_life_time unlimited;
还有一种情况就是重置此用户密码时不知道原密码是什么,重置为一个新密码后,涉及到的所有应用都需要修改密码,对于过于复杂的老系统,涉及到的应用又比较多,如要改密码则是牵一发而动全身,所以也就很少改密码。
当遇到密码过期后,有些项目组是不希望修改为新密码的,不想动应用想继续用原来的老密码(当然这是不安全的,对于重要的系统建议定期修改密码)。但是和你对接的项目组人又不知道原密码是啥,应用连接串里又配置的是密文,没法查看密码或者密码丢失。
在这种情况下,希望重置为原来的密码,当然也是可以的,应该有两种方案可以使用,演示如下:
二、重置为原密码
oracle 11g 的密码密文存在 user$ 的 password 字段,我们可以直接修改此表的 password 列。
现在将新改为 tiger 的 scott 密码过期,然后我们通过 user$ 的 password 字段值来修改一下密码。
sql> alter user scott password expire;
user altered.
sql> select username,account_status,u.password from dba_users,user$ u where username=name and username='scott';
username account_status password
------------------------------ -------------------------------- ------------------------------
scott expired f894844c34402b67
sql> alter user scott identified by values 'f894844c34402b67';
user altered.
记得以前在项目组的时候,业务要求将测试某一个用户的密码改为何生产用户一样的密码,但又不知道生产用户的明文密码,这就很难办了,只能在生产上查询此用户的密文拿过来改到测试环境,如下示例:
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';
如上,password 和 spare4 列的密文都可以拿来重置密码,在他的问题中我是采用获取 ddl 创建用户的语句来获取密码的,values 后面以 “s” 开头的就是密码密文,拿来直接用就行,如下示例:
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 获取创建用户的语句中就是 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
米乐app官网下载 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
————————————————————————————