使用oracle的密文密码来刷新用户密码

https://blog.51cto.com/u_13482808/6458171

问题概述

oracle中,经常用户的状态会变成locked,expired等状态,遇到这种情况,按照具体环境进行操作。

首先,如果是locked状态,直接执行 alter user scott account unlock 就可以了。

但是如果变成expired状态,oracle本身是不提供解锁的语句的,因为账户过期,必须要用户更改密码, 账户才能重新使用。但有些时候,因为各种原因,我们并不知道原密码的明文是什么,同时在高版本数据库中,对用户密码进行了高强度加密,无法使用密码密文进行修改时,可以通过修改USER$的方式进行操作。

解决方案

UPDATE USER$ SET ASTATUS=0 WHERE NAME='SCOTT';
COMMIT;
alter system flush shared_pool;

其中,ASTATUS有以下取值:

STATUS# STATUS
---------- --------------------------------
0 OPEN
1 EXPIRED
2 EXPIRED(GRACE)
4 LOCKED(TIMED)
8 LOCKED
5 EXPIRED & LOCKED(TIMED)
6 EXPIRED(GRACE) & LOCKED(TIMED)
9 EXPIRED & LOCKED
10 EXPIRED(GRACE) & LOCKED