oracle密码过期处理办法

当账号处于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;



请使用浏览器的分享功能分享到微信等