Oracle資料庫使用者帳號處於expired狀態解決方案
Oracle資料庫賬戶到期,必須要使用者更改密碼, 賬戶才能重新使用。
但有些時候, 因為各種原因, 我們並不知道原密碼的明文是什麼,但很多時候又不能修改已有密碼,好在可以用原密碼來更改密碼。
在11G中,dba_users.password已經不再顯示使用者的密碼:
SQL> select username,ACCOUNT_STATUS from dba_users where username in ('SYSTEM','SCOTT');
USERNAME ACCOUNT_STATUS
------------------------------ --------------------------------
SCOTT OPEN
SYSTEM EXPIRED
SQL> select password from dba_users where username in ('SYSTEM','SCOTT');
PASSWORD
------------------------------
在系統資料表user$中,可以查看使用者的密碼(PASSWORD)和狀態(ASTATUS)
SQL> select user#,name,password,astatus from user$ where name in ('SYSTEM','SCOTT');
USER# NAME PASSWORD ASTATUS
---------- ------------------------------ ------------------------------ ----------
83 SCOTT F894844C34402B67 0
5 SYSTEM 2D594E86F93B17A1 1
SQL>
可以通過上面的查詢結果,用原來的密碼來修改到期使用者的密碼:
SQL> alter user system identified by values '2D594E86F93B17A1';
User altered.
SQL> select user#,name,password,astatus from user$ where name in ('SYSTEM','SCOTT');
USER# NAME PASSWORD ASTATUS
---------- ------------------------------ ------------------------------ ----------
83 SCOTT F894844C34402B67 0
5 SYSTEM 2D594E86F93B17A1 0
SQL>
其實也可以直接修改表user$的欄位ASTATUS為0,這樣使用者帳號就變成open狀態了。
ASTATUS對應的值的含義可以同過user_astatus_map查看
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
9 rows selected.
SQL>