延遲密碼驗證特性引起的資料庫HANG死及當機
延遲密碼驗證特性 特性簡述
為了防止使用者密碼的暴力破解,從11G開始引入了一個新特性:密碼延遲認證。
等待使用者輸入密碼的時間,隨著輸入錯誤密碼的次數而不斷延長。以此緩解暴力破解Oracle使用者密碼。
特性潛在引發問題
- 修改使用者密碼引發大量Library Cache Lock 資料庫密碼應該是定時修改,以提高資料庫安全性,防止駭客攻擊。但是, 大部署大量程式的業務 系統裡,難免會有遺漏的情況。在修改完密碼後,資料庫會出現大量的Library Cache Lock等待事件。在MOS 上有說明:High 'library cache lock' Wait Time Due to Invalid Login Attempts(1309738.1)
- BUG 使用者登入資料庫,哪怕正常登入,每次登入的時間都在延長。
問題說明
10日17點左右得知某資料庫出現資料庫使用者鎖定的情況,登上去後發現一節點資料庫hang死,二節點資料庫當機,進行處理排查後,業務正常執行,以下為排查過程。
故障具體日誌分析
報告分析
我們取一節點故障點16 點到17 點以及9 日相同時間點的AWR 報告進行對比發現:
發現故障點dbtime 相比高了24 倍,其中top10 的等待事件中, library cache lock 達到了總dbtime 的75.5%
檢視時間模型:
connection management call elapsed time 該統計資訊達到了dbtime 的77%
報告分析
同樣我們取故障點的addm 報告:
Activity During the Analysis Period ----------------------------------- Total database time was 499730 seconds. The average number of active sessions was 138.12. Summary of Findings ------------------- Description Active Sessions Recommendations Percent of Activity -------------------------------- ------------------- --------------- 1 Session Connect and Disconnect 106.79 | 77.32 1 2 Shared Pool Latches 104.22 | 75.45 0 3 Unusual "Cluster" Wait Event 11.32 | 8.2 2 4 Unusual "Concurrency" Wait Event 4.42 | 3.2 4 5 Buffer Busy - Hot Objects 4.18 | 3.03 0 6 Unusual "Cluster" Wait Event 2.83 | 2.05 2 |
可以看到在同一時間,排名第一 的 Session Connect and Disconnect
Finding 1: Session Connect and Disconnect Impact is 106.76 active sessions, 77.32% of total activity. ----------------------------------------------------------- Session connect and disconnect calls were consuming significant database time.
Recommendation 1: Application Analysis Estimated benefit is 106.79 active sessions, 77.32% of total activity. ---------------------------------------------------------------------- Action Investigate application logic for possible reduction of connect and disconnect calls. For example, you might use a connection pool scheme in the middle tier. |
報告給出的分析為:會話連線和斷開連線呼叫消耗了大量的資料庫時間。
故障時間ash 報告分析
我們取故障時間點16 點至17 點的ash 報告:
同樣的,我們可以獲取到跟awr 報告相同的等待時間及時間模型。
我們可以看到16:35 開始資料出現大量的library cache lock
我們獲取到該等待事件的p1,p2,p3 值,分別代表該等待事件的控制程式碼地址,鎖地址,鎖模式及名稱空間。
我們將p3 的值十進位制轉換為16 進位制獲取到它的名稱空間值為79 ,再在資料庫中將其查出:
select distinct KGLHDNSP, KGLHDNSD from x$kglob where KGLHDNSP=79 ; KGLHDNSP KGLHDNSD ---------- ------ 79 ACCOUNT_STATUS
|
可以看到,該鎖指向了賬戶狀態,綜上所述,結合之前應用反饋的使用者鎖問題,我們有理由認定此次故障是由於錯誤密碼的大規模登入資料庫,導致出現大量的library cache lock ,最終拖垮了資料庫,導致資料庫的hang 死。
故障總結
故障結論分析
結合第二章節的故障分析,結合之前應用反饋的使用者鎖問題,我們有理由認定此次故障是由於錯誤密碼的大規模登入資料庫,導致出現大量的library cache lock ,最終拖垮了資料庫,導致資料庫的hang 死,至於哪些應用導致的大規模錯誤密碼登入,還得結合應用去排查。
解決方案
從上述3.1 節的分析,給出如下建議:
1. 密碼策略最佳化
密碼過期時間,從11g 開始,oracle 對資料庫所有密碼預設過期時間180 天: SQL> alter profile default limit PASSWORD_LIFE_TIME unlimited;
密碼登陸錯誤次數,對於輸入錯誤密碼導致資料庫賬號被鎖定: SQL> alter profile default limit FAILED_LOGIN_ATTEMPTS unlimited; 或 修改為100 次 alter profile default limit FAILED_LOGIN_ATTEMPTS 100;
密碼大小寫敏感,該引數預設值是TRUE ,因此,預設情況下密碼大小寫是敏感的 SQL> alter system set SEC_CASE_SENSITIVE_LOGON=false;
密碼錯誤延遲登入,11G 引入了延遲密碼驗證,在輸入錯誤的密碼後,後續如果還是採用錯誤的密碼登陸,將會導致密碼延遲驗證,從第三次開始,後續的每次登陸導致密碼延遲1 秒左右 而且會導致失敗登陸延長,可以透過如下事件來遮蔽密碼的延遲驗證 SQL> ALTER SYSTEM SET event='28401 TRACE NAME CONTEXT FOREVER, LEVEL 1' SCOPE=SPFILE SID='*';
禁止OCI 程式登入風暴,初始化引數SEC_MAX_FAILED_LOGIN_ATTEMPTS 的預設設定為10 ,表示在連線嘗試達到指定次數後會自動斷開連線。即使未啟用口令概要檔案,也會強制實施此引數。 此引數可以防止程式連線到資料庫,然後成百上千次地嘗試口令以透過驗證。如果認為該引數沒有特別的必要性,可以考慮調大: alter system set sec_max_failed_login_attempts=2147483647 scope=spfile sid=’*’;
|
3. Sql 最佳化
Awr 報告發現資料庫存在比較大的解析及硬解析,檢視後發現比較多的sql 沒有使用繫結變數 建議: 1. 最佳化sql ,使用繫結變數 2. 儘量使用索引 |
四 附錄
官方文件: Doc ID 1309738.1
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69993859/viewspace-2752646/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle資料庫密碼延遲驗證Oracle資料庫密碼
- ORACLE密碼錯誤驗證延遲Oracle密碼
- SQL資料庫開發中的SSIS 延遲驗證方法SQL資料庫
- DRM特性引起的RAC節點當機
- Exadata修改sshd密碼驗證方式 延遲10分鐘關閉 明明密碼對了卻登入不上密碼
- [20210529]延遲開啟資料庫.txt資料庫
- ORACLE 11g的密碼錯誤延時驗證Oracle密碼
- Oracle 11g 密碼延遲認證與 library cache lock 等待Oracle密碼
- 1.6.5.2. 通過密碼檔案驗證連線資料庫密碼資料庫
- Oracle11g 密碼延遲認證導致library cache lock的情況分析Oracle密碼
- volatile的特性程式碼驗證
- 谷歌I/O大會談及Stadia 如何保證雲中心低延遲體驗?谷歌
- Redis 的 KEYS 命令引起 RDS 資料庫雪崩,當機 2 次,造成幾百萬損失Redis資料庫
- ACCESS 密碼驗證/文字驗證中的小坑密碼
- 一種透過延遲事務提升資料庫效能的方法資料庫
- 驗證碼原理及驗證
- Redis資料操作長延遲分析Redis
- 從庫延遲案例分析
- jsonlint:python的json資料驗證庫JSONPython
- (資料庫十)資料庫中的鎖機制以及死鎖產生的原因及解決辦法資料庫
- JQuery表單驗證(包括:使用者名稱,手機號,密碼,確認密碼,驗證碼60s)jQuery密碼
- swift 郵箱、密碼、手機號、身份證驗證正則Swift密碼
- MySQL 資料庫重置密碼MySql資料庫密碼
- MySQL 延遲從庫介紹MySql
- MySQL主從資料庫同步延遲問題怎麼解決MySql資料庫
- Redis的KEYS命令引起當機事件Redis事件
- Pydantic:強大的Python 資料驗證庫Python
- MySQL 中讀寫分離資料延遲MySql
- 解密MSSQL連結資料庫的密碼解密SQL資料庫密碼
- 使用Docker部署帶密碼驗證的RedisDocker密碼Redis
- 無密碼驗證:客戶端密碼客戶端
- RabbitMQ延遲訊息的延遲極限是多少?MQ
- 短視訊原始碼,密碼框驗證資訊文字提示原始碼密碼
- 資料庫的下一場革命:S3 延遲已降至原先的 10%,雲資料庫架構該進化了資料庫S3架構
- 轉化率模型之轉化資料延遲模型
- 資料庫伺服器記憶體不夠,DBW0 hang死導致sqlplus連不上資料庫伺服器記憶體SQL
- 年底了,你的資料庫密碼安全嗎資料庫密碼
- 隨機驗證碼隨機