登入Oracle時出現ORA-28001: the password has expired 的錯誤。
Oracle 11g 中的新帳號預設密碼逾時期限是180天,
如果超過180天仍未修改密碼,該帳號會被鎖定,因此無法再以此帳號登入。
(如果是某線上系統的資料庫登入帳號,該系統就GG惹!!)
此時若要驗證,可先用其他有權限的帳號sqlplus連接並登入Oracle後,
先在dba_users表中查詢該帳號的狀態:(在此使用測試帳號 “TEST_USER” )
1 2 3 4 |
SQL> SELECT username, user_id, account_status, to_char(created,'yyyy-mm-dd hh24:mi:ss') created FROM dba_users WHERE username = 'TEST_USER'; USERNAME USER_ID ACCOUNT_STATUS CREATED ---------- ------- ------------------ ------------------- TEST_USER 45 EXPIRED & LOCKED 2013-08-15 00:29:48 |
可以看到ACCOUNT_STATUS的狀態是已逾時鎖定的狀態 EXPIRED & LOCKED,
如果是正常可使用的帳號,ACCOUNT_STATUS應顯示為OPEN。
此時可以查詢目前Oracle中的密碼逾時設定是幾天,輸入以下指令:
1 2 3 4 5 |
SQL> SELECT * FROM dba_profiles WHERE profile='DEFAULT' AND resource_name='PASSWORD_LIFE_TIME'; PROFILE RESOURCE_NAME RESOURCE LIMIT ---------- --------------------------- --------------- -------- DEFAULT PASSWORD_LIFE_TIME PASSWORD 180 |
看來的確是預設的180天,此時可以選擇乖乖地修改密碼已逾時的帳號之密碼:
1 |
ALTER USER ???? IDENTIFIED BY ??; |
或者將Oracle的全域密碼逾時期限調整為無限制:
1 |
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED |
如此就不用再擔心密碼逾時的問題了!
(BUT!! BUT!! BUT!! 正式環境不建議設定為無限制!! 會有安全疑慮。)