Oracle數據庫用戶的密碼過期問題處理


SQL> select username, user_id, account_status,expiry_date, profile from dba_users where username = 'SCOTT';

USERNAME USER_ID ACCOUNT_STATUS EXPIRY_DATE PROFILE
-------------------- ---------- ------------------------------------------------- -------------------
SCOTT 52 EXPIRED & LOCKED(TIMED) 2019/07/22 20:12:35 DEFAULT


一、Oracle數據庫用戶的密碼過期時間如何修改為永不過期

Oracle的密碼過期規則是用Profile來管理的,系統默認只有一個Profile(DEFAULT),該profile的密碼過期規則為180天。

修改Oracle數據庫用戶的密碼過期時間為永不過期?

而所有的用戶都使用該DEFAULT的profile,所以如果修改DEFAULT的過期規則會影響所有的用戶;

所以新建一個profile,修改該profile的過期規則為無限期,讓某個用戶適用於該profile,該用戶的過期規則會變更。

以下舉例:修改SCOTT用戶的密碼過期規則為UNLIMITED

1. 新建profile "PASSWD_UNLIMIT",規則與DEFAULT一致(因為一個profile中包含很多的項目,我們此時只想修改過期規則,其他的不變)

2. 修改profile "PASSWD_UNLIMIT",修改過期規則為UNLIMITED

3. 將'SCOTT'用戶適用新的profile "PASSWD_UNLIMIT"

SQL如下:
SELECT * FROM dba_profiles WHERE profile='DEFAULT' AND resource_name='PASSWORD_LIFE_TIME';

SELECT * FROM dba_profiles;

--查看用戶profile

select username, user_id, account_status,expiry_date, profile from dba_users where username = 'SCOTT';

--1. 創建新的profile(PASSWD_UNLIMIT)復制DEFAULT的Script
CREATE PROFILE "PASSWD_UNLIMIT" LIMIT
SESSIONS_PER_USER UNLIMITED
CPU_PER_SESSION UNLIMITED
CPU_PER_CALL UNLIMITED
CONNECT_TIME UNLIMITED
IDLE_TIME UNLIMITED
LOGICAL_READS_PER_SESSION UNLIMITED
LOGICAL_READS_PER_CALL UNLIMITED
COMPOSITE_LIMIT UNLIMITED
PRIVATE_SGA UNLIMITED
FAILED_LOGIN_ATTEMPTS 10
PASSWORD_LIFE_TIME 180
PASSWORD_REUSE_TIME UNLIMITED
PASSWORD_REUSE_MAX UNLIMITED
PASSWORD_LOCK_TIME 1
PASSWORD_GRACE_TIME 7
PASSWORD_VERIFY_FUNCTION NULL;
SELECT * FROM dba_profiles;
--2. 修改新建的profile(PASSWD_UNLIMIT),密碼過期為不過期
ALTER profile PASSWD_UNLIMIT limit PASSWORD_LIFE_TIME UNLIMITED;
--3. 修改用戶的Profile為新的profile
alter user SCOTT profile PASSWD_UNLIMIT;

二、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>
SQL> select username, user_id, account_status,expiry_date, profile from dba_users where username = 'SCOTT';

USERNAME USER_ID ACCOUNT_STATUS EXPIRY_DATE PROFILE
-------------------- ---------- ------------------------------------------------- ------------------- --------------------
SCOTT 52 OPEN PASSWD_UNLIMIT

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM