当账号处于expired locked 无法登录,但是还不知道该用户的密码,
并且还不想修改成别的密码,该如何解决呢?
解决办法:
方法1: 允许登录的天数为无限
密码过期后也可修改profile中的password_grace_time控制使用的天数
alter profile default limit PASSWORD_GRACE_TIME UNLIMITED;
alter profile default limit PASSWORD_GRACE_TIME UNLIMITED; 让这个允许登录的天数为无限!
方法2:直接修改密码:-----建议使用这个方法!
1)查出用户的密码,注意是密文的
SQL> select user#,name,password from user$ where name ='SYSTEM';
USER# NAME PASSWORD
---------- ------------------------------ ------------------------------
5 SYSTEM 2D594E86F93B17A1
2)使用如下方法修改账号为原来的密码:类似于mysql as password的方式!
SQL> alter user system identified by values '2D594E86F93B17A1';
User altered.
3)再次查看发现账号状态为0了
SQL> select user#, name, astatus from user$ where name='SYSTEM';
USER# NAME ASTATUS
---------- ------------------------------ ----------
5 SYSTEM 0
注意:如下所示user$表中的ASTATUS的状态值,对应的具体的状态如下所示:
SQL> select * from user_astatus_map;
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
方法3:不建议使用!修改Oracle基表sys.user$
1)直接修改user$表的astatus值
update user$ set astatus=0 where name='SYSTEM';
commit;
2)需要清理缓存,因为这些账号的状态信息,会在内存中缓存起来;该操作有风险,不到万不得已,切勿在生产上操作,如果必须使用这个方法,请先关闭业务或者在业务底下的时候快速执行,然后alter system checkpoint; 并且切换下redo alter system switch logfile;
SQL> alter system flush shared_pool;
建议生产上设置概要文件密码策略永不过期:
alter profile default limit PASSWORD_LIFE_TIME UNLIMITED;