Oracle账号被锁住(EXPIRED(GRACE))不换密码的解锁方法

2022-09-01 573点热度 0人点赞 0条评论

密码快过期,程序连上去报错,如下:

2022-08-31 20:35:20 [WARN]JDBCExceptionReporter - SQL Warning: 28002, SQLState: 99999
2022-08-31 20:35:20 [WARN]JDBCExceptionReporter - ORA-28002: the password will expire within 7 days

2023-05-11 19:32:13 [ERROR]SqlExceptionHelper - ORA-28001: the password has expired

查询账号状态显示如下(EXPIRED(GRACE)),应该就是被锁住了:

select username, profile, account_status from dba_users where username = 'SOME_USER';

SOME_USER	DEFAULT	EXPIRED(GRACE)

使用解锁的命令,但是无效:

alter user SOME_USER profile DEFAULT account unlock;

原因是这种方式并没有修改密码,系统锁住账户的原因是密码过期,所以系统要求修改密码

以下方式是不修改密码也做到解锁账户的方法:

首先运行:

select DBMS_METADATA.GET_DDL('USER','SOME_USER') from dual;

其中SOME_USER替换成被锁住的账户,我这边运行出来是这样的结果:

CREATE USER "SOME_USER" IDENTIFIED BY VALUES 'S:F9D5FQQ8238671D6B9C6CFAF272CFB834445C771A998F8003A25AC1D8424;3GB7A747AF7028JC'
DEFAULT TABLESPACE "SOME_USER_TS"
TEMPORARY TABLESPACE "TEMP"

然后执行如下SQL:

ALTER USER "SOME_USER" IDENTIFIED BY VALUES 'S:F9D5FQQ8238671D6B9C6CFAF272CFB834445C771A998F8003A25AC1D8424;3GB7A747AF7028JC';

以上命令是修改账户密码的,其中VALUES里面的指其实就是系统原来的加密过的密码,我们从刚才执行的SQL中复制过来的,也就是说用这种方式绕过系统,使用了一个原来的密码来修改了密码,Oracle系统认为用户修改了密码,然后就把账号解锁了。

此时查询账号状态已经是正常的了:

select username, profile, account_status from dba_users where username = 'SOME_USER';

SOME_USER	DEFAULT	OPEN

如果需要把某个账户设置成密码永不过期,可以参考:https://blog.terrynow.com/2022/07/29/oracle-set-account-password-never-expire-profile-usage/

admin

这个人很懒,什么都没留下

文章评论

您需要 登录 之后才可以评论