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

Google 自訂搜尋

Goole 廣告

隨機相片
PIMG_00152.jpg

授權條款

使用者登入
使用者名稱:

密碼:


忘了密碼?

現在就註冊!

DB研討會 : [轉貼]如何更改ORACLE 用戶的 expired狀態

發表者 討論內容
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15771
[轉貼]如何更改ORACLE 用戶的 expired狀態

如何更改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博客
前一個主題 | 下一個主題 | | | |

討論串




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