茫茫網海中的冷日 - 對這文章發表回應
茫茫網海中的冷日
         
茫茫網海中的冷日
發生過的事,不可能遺忘,只是想不起來而已!
 恭喜您是本站第 1675090 位訪客!  登入  | 註冊
主選單

Google 自訂搜尋

Goole 廣告

隨機相片
IMG_60D_00017.jpg

授權條款

使用者登入
使用者名稱:

密碼:


忘了密碼?

現在就註冊!

對這文章發表回應

發表限制: 非會員 可以發表

發表者: 冷日 發表時間: 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博客
內容圖示
url email imgsrc image code quote
樣本
bold italic underline linethrough   












 [詳情...]
validation picture

注意事項:
預覽不需輸入認證碼,僅真正發送文章時才會檢查驗證碼。
認證碼有效期10分鐘,若輸入資料超過10分鐘,請您備份內容後,重新整理本頁並貼回您的內容,再輸入驗證碼送出。

選項

Powered by XOOPS 2.0 © 2001-2008 The XOOPS Project|