在用戶的profile 屬性裡面有一個屬性:FAILED_LOGIN_ATTEMPTS,該參數默認值是10. 即當我們用戶連續10次輸入錯誤密碼,這個用戶就會被鎖住。用戶連詞失敗次數是在表USER$ 中的lcount字段記錄的。 該值默認為0. 當失敗一次,該值加1. 成功登錄,該值清零。
一般在生產環境下,會根據具體情況設置這個參數,如果防止用戶被鎖,則將這個參數設置為UNLIMITED。 這個是注意的地方。當然設置成無限也有它的弊端,比如不能防止暴力破解數據庫密碼。
有關profile 的更多內容參考:
Oracle 用戶 profile 屬性
http://blog.csdn.Net/tianlesoftware/article/details/6238279
在Oracle 11g中默認啟用了對登錄注銷操作LOGON/LOGOFF的審計,那麼如果我們發現用戶被鎖,那麼可以應用11g的審計功能來查看從哪台機器上發來的鏈接失敗導致用戶被鎖,可以幫助我們定位問題。
腳本如下:
- SQL> selectos_username,userhost,terminal,username,count(*)
- 2 from dba_audit_trail
- 3 where returncode = 1017
- 4 group byos_username,userhost,username,terminal;
- OS_USERNAME USERHOST TERMINAL USERNAME COUNT(*)
- ------------------------------------------------------------ ------------ ------------ ----------
- DavidDai\Administrator WORKGROUP\DAVIDDAI DAVIDDAI ICD 7
- DavidDai\Administrator WORKGROUP\DAVIDDAI DAVIDDAI SYSTEM 9
- DavidDai\Administrator WORKGROUP\DAVIDDAI DAVIDDAI SYS 3
- DavidDai\Administrator WORKGROUP\DAVIDDAI DAVIDDAI EXIT 1
注意:對於LOGON PER SECOND很高的數據庫,如果應用程序配置文件中的數據庫用戶密碼不正確,同時應用在短期內發起大量會話登錄數據庫的話可能引發頻繁的dc_users字典緩存鎖,用戶登錄無法成功,乃至整個實例hang住。這個問題直接參考Maclean的blog:
Row Cache lock Problem
http://www.Oracledatabase12g.com/archives/row-cache-lock-problem.Html