Oracle Database 11g Enterprise Edition 11.2.0.1.0
Enterprise Linux Server 5.5
Oracle 10g 開始,預設 Profile 將 FAILED_LOGIN_ATTEMPTS 設為 10。連續 10 次登入失敗,帳號會被鎖定(ORA-28000: the account is locked)。
-- 查看當前設定
SELECT * FROM dba_profiles WHERE resource_name = 'FAILED_LOGIN_ATTEMPTS';
-- 修改為 2 次鎖定(測試用)
ALTER PROFILE DEFAULT LIMIT FAILED_LOGIN_ATTEMPTS 2;
-- 設為無限制
ALTER PROFILE DEFAULT LIMIT FAILED_LOGIN_ATTEMPTS UNLIMITED;
SQL> conn hr/w
ERROR: ORA-01017: invalid username/password; logon denied
SQL> conn hr/w
ERROR: ORA-01017: invalid username/password; logon denied
SQL> conn hr/w
ERROR: ORA-28000: the account is locked
第三次嘗試即提示帳號已鎖定,驗證設定生效。
用戶狀態資訊儲於 DBA_USERS,底層對應 SYS.USER$ 表。其中 LCOUNT 欄位專門記錄連續登入失敗次數。
SQL> SELECT name, lcount FROM user$ WHERE name = 'HR';
NAME LCOUNT
HR 0
-- 第 1 次失敗
SQL> conn hr/s
ERROR: ORA-01017...
SQL> SELECT name, lcount FROM user$ WHERE name = 'HR';
NAME LCOUNT
HR 1
-- 第 2 次失敗
SQL> conn hr/s
ERROR: ORA-01017...
SQL> SELECT name, lcount FROM user$ WHERE name = 'HR';
NAME LCOUNT
HR 2
-- 登入成功後
SQL> conn hr/correct_password
Connected.
SQL> SELECT name, lcount FROM user$ WHERE name = 'HR';
NAME LCOUNT
HR 0 -- 自動歸零
實驗證實:LCOUNT 精確記錄連續失敗次數,登入成功即歸零。此機制有助於 DBA 監控可疑登入活動,強化資料庫安全。
更深層的邏輯可參考核心腳本 ?/rdbms/admin/sql.bsq,有興趣的讀者可自行研究。