今天正在上班的過程中,客戶反映了他們的系統登錄不了,經過我的一番檢查,發現是因為數據庫密碼過期導致的,在網上查找相關資料發現還真有此種情況發生,在此順便做了個整理,以便共同交流!
產生原因:
在oracle11g中默認在default概要文件中設置了“PASSWORD_LIFE_TIME=180天”所導致。
在oracle11g中默認在default概要文件中設置了“FAILED_LOGIN_ATTEMPTS=10次”,當輸入密碼錯誤次數達到設置值將導致此問題。
解決辦法:
針對原因1--->
1、查看用戶的proifle是哪個,一般是default:
1
|
sql> SELECT username,PROFILE FROM dba_users; |
2、查看指定概要文件(如default)的密碼有效期設置:
1
|
sql> SELECT * FROM dba_profiles s WHERE s.profile= 'DEFAULT' AND resource_name= 'PASSWORD_LIFE_TIME' ; |
3、將密碼有效期由默認的180天修改成“無限制”:
1
|
sql> ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED; |
備注:修改之后不需要重啟動數據庫,會立即生效;
修改后,還沒有被提示ORA-28002警告的帳戶不會再碰到同樣的提示;已經被提示的帳戶必須再改一次密碼,舉例如下:
1
2
|
$sqlplus / as sysdba sql> alter user smsc identified by <原來的密碼> ----不用換新密碼 |
oracle11g啟動參數resource_limit無論設置為false還是true,密碼有效期都是生效的,所以必須通過以上方式進行修改。以上的帳戶名請根據實際使用的帳戶名更改。
針對原因2--->
1、查看用戶的proifle是哪個,一般是default:
1
|
sql> SELECT username,PROFILE FROM dba_users; |
2、查看指定概要文件(如default)的密碼有效期設置:
1
|
sql> SELECT * FROM dba_profiles s WHERE s.profile= 'DEFAULT' AND resource_name= 'FAILED_LOGIN_ATTEMPTS' ; |
3、將嘗試登錄失敗次數由默認的10次修改成“無限制”:
1
|
sql> ALTER PROFILE DEFAULT LIMIT FAILED_LOGIN_ATTEMPTS UNLIMITED; |
4、修改后,還沒有被提示ORA-28000警告的用戶不會再碰到同樣的提示;
已經被鎖定的帳戶必須解除鎖定,舉例如下:
1
2
|
$sqlplus / as sysdba sql> alter user smsc identified by oracle account unlock; |
5、修改后default profile應該如下:
1
|
sql> select * from dba_profiles WHERE dba_profiles.profile= 'DEFAULT' ; |
********************************************************************************************************
備注:修改之后不需要重啟動數據庫,會立即生效;
如果出現ORA-28000 the account is locked.錯誤
1
|
sql> alter user 用戶名 account unlock; |
以上所述是小編給大家介紹的Oracle用戶密碼過期和用戶被鎖的解決方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對服務器之家網站的支持!
原文鏈接:https://my.oschina.net/u/3128169/blog/879019