對這文章發表回應
發表限制: 非會員 可以發表
發表者: 冷日 發表時間: 2018/8/6 7:00:47
如何更改ORACLE 用戶的 expired狀態
oracle中, 經常用戶的狀態會變成locked, expired 等狀態, 這種情況下怎麼處理呢?
首先, 如果是locked狀態還好辦, DBA直接執行alter user scott account unlock 就可以了.
但是如果變成expired狀態, oracle本身是不提供解鎖的語句的, 因為賬戶過期,必須要用戶更改密碼, 賬戶才能重新使用. 但有些時候, 因為各種原因, 我們並不知道原密碼的明文是什麼,這時候就很麻煩了, 經研究發現,有兩種方法可以實現:
密文 來更改密碼:
SQL>conn /as sysdba
SQL>select password from dba_users where username='SCOTT';
password
------------------------------
E65E6AF62B2449CF
SQL>alter user SCOTT identified by values 'E65E6AF62B2449CF';
這種情況下,雖然我們不知道原密碼是什麼,但可以用它的密文來更改密碼,這樣,在不知道原密碼的情況下,既保持了密碼不改變, 又可以把expired的狀態更改掉.
二. 下面這一條語句搞定,不管用戶的狀態是什麼:
UPDATE USER$ SET ASTATUS=0 WHERE NAME='SCOTT';
原理詳解:
用戶的信息都是存在user$這樣一個系統表裡面的
SQL> select name,ASTATUS,password from user$ where name IN('SYS','SCOTT');
NAME ASTATUS PASSWORD
------------------------------ ---------- ------------------------------
SCOTT 1 E65E6AF62B2449CF
SYS 0 8A8F025737A9097A
SQL> select username,account_status from dba_users where username in('SYS','SCOTT');
USERNAME ACCOUNT_STATUS
------------------------------ --------------------------------
SYS OPEN
SCOTT EXPIRED
而用戶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.
關鍵是user$表本身是可以更改的, 所以此時我們就可以直接把用戶的ASTATUS字段改成0就可以了
SQL> UPDATE USER$ SET ASTATUS=0 WHERE NAME='SCOTT';
1 row updated.
SQL> COMMIT;
Commit complete.
SQL> alter system flush shared_pool;
System altered.
SQL> select name,ASTATUS,password from user$ where name IN('SYS','SCOTT');
NAME ASTATUS PASSWORD
------------------------------ ---------- ------------------------------
SCOTT 0 E65E6AF62B2449CF
SYS 0 8A8F025737A9097A
SQL> select username,account_status from dba_users where username in('SYS','SCOTT');
USERNAME ACCOUNT_STATUS
------------------------------ --------------------------------
SCOTT OPEN
SYS OPEN
原文出處:如何更改ORACLE 用户的 expired状态 - CSDN博客