錯誤的使用者名稱密碼登入導致的資料庫效能問題
從Oracle 11.1開始,錯誤的使用者名稱密碼登入可能會導致在資料庫層面看到顯著的“row cache lock”等待。
很多使用者認為這是一個bug,而實際上這是一個資料庫保護機制。
Oracle的sqlplus工具會在3次錯誤密碼輸入後自動斷開連線,但是外部應用程式卻可以編碼,不斷呼叫登入API進行密碼嘗試。所以如果沒有一個資料庫層面的安全控制,這將是非常危險的。
從Oracle 11.1開始,資料庫會在對同一個使用者3次錯誤的密碼嘗試之後,開始鎖定這個使用者3秒鐘,才允許下一次登入。這個鎖定時間將從3秒逐漸延長,不斷增加。
所有以該使用者登入的session都會等待“row cache lock”,哪怕他是用正確的密碼登入的。
很多使用者不理解這樣做是為了幫助使用者避免風險,而對看到的“row cache lock”等待提出抱怨。
所以Oracle在Bug 7715339的修復中提供了一個方法(event 28401)來繞過這段程式碼,來供使用者做不同選擇。
event="28401 trace name context forever, level 1" # disable logon delay
必須說明的是,這實際上並不是一個bug,而是一個功能增強。使用者必須清楚如果設定了這個事件,將使您的資料庫暴露在密碼猜測的風險之下。
Bug 7715339的修復被包含在11.2.0.1 PSU之中。而在11.1.0.7上打補丁7715339,預設已經相當於開啟event 28401了。
在11.2.0.2之後,Oracle修改程式碼,將這一段“row cache lock”等待修改成了“library cache lock”等待。
總結一下:
1)11.1.0.X上,錯誤的使用者名稱密碼登入,將導致顯著的“row cache lock”等待。
使用者可以在11.1.0.7上打補丁7715339,不用設定event 28401,就可繞過這段安全控制程式碼。
2)11.2.0.1上,錯誤的使用者名稱密碼登入,將導致顯著的“row cache lock”等待。
使用者不用打補丁(因為已經包含在11.2.0.1中了),直接設定event 28401,就可繞過這段安全控制程式碼。
3)11.2.0.2以上的版本(包含11.2.0.2),錯誤的使用者名稱密碼登入,將導致顯著的“library cache lock”等待。
使用者不用打補丁(因為已經包含在11.2.0.1中了),直接設定event 28401,就可繞過這段安全控制程式碼。
必須再次說明的是,使用者必須清楚如果打補丁或者設定了這個事件,將使您的資料庫暴露在密碼猜測的風險之下。
正題:
有使用者反饋,即使設定了event 28401,仍會觀察到錯誤的使用者名稱密碼登入導致“library cache lock”等待,這是為什麼呢?為此,我們做了以下測試進行說明:
起10個程式,同時進行錯誤的使用者名稱密碼登入,並測試未設定event 28401和設定event 28401進行比較,從V$SYSTEM_EVENT中多次觀察獲取平均等待時間:
select total_waits,Time_waited_fg/total_waits
from V$SYSTEM_EVENT
where event='library cache lock'
未設定event 28401:
91 1395.252747252747252747252747252747252747
98 2352.959183673469387755102040816326530612
106 2687.698113207547169811320754716981132075
116 3495.862068965517241379310344827586206897
<========library cache lock的平均等待時間很快從13.95秒逐漸增加到34.95秒,並且持續增加。
設定event 28401之後:
23142 2.97325209575663296171463140610146054792
24329 3.03592420568046364421061284886349623906
<========即使在24329次等待之後,library cache lock的平均等待時間仍然穩定在0.03秒。
也就是說,event 28401是生效的,“等待時間從3秒逐漸增加的”的安全機制被繞過了,但是“library cache lock”卻無法避免。
這是因為,錯誤的使用者名稱密碼登入仍會在資料庫內部更新該使用者的登入次數,錯誤登入次數,上次登入時間等資訊,需要申請“library cache lock”。
而“library cache lock”的等待時間跟併發登入的程式數和資料庫效能有關。
如果有多個使用者進行不斷的進行錯誤的密碼嘗試,可能仍會觀察到較高的“library cache lock”等待。
因為“錯誤的密碼嘗試”應用程式的程式碼邏輯一般都是非常瘋狂的,正確的登入可能一次就過了,而一旦錯誤會反覆嘗試並且沒有sleep等待,這將導致一秒鐘可能會發起幾百次上千次的嘗試,
而多個程式併發時就容易觀察到平均等待幾十毫秒甚至幾百毫秒的“library cache lock”了。因為會不斷嘗試,在資料庫層面會累積而很容易觀察到。
但是設定event 28401之後,一般不會有幾十秒上百秒的單次等待了,因為單次遞增的等待機制被繞過了。
總體來講,資料庫管理員應該儘快發現並解決錯誤的使用者名稱密碼登入問題(它們一般是因為資料庫密碼被更改而應用程式沒有及時同步造成的),而不應該過度依賴event 28401。
因為無論從哪個角度來看,錯誤的使用者名稱密碼登入都是一個應用層面的異常問題,是應該被避免的。
很多使用者認為這是一個bug,而實際上這是一個資料庫保護機制。
Oracle的sqlplus工具會在3次錯誤密碼輸入後自動斷開連線,但是外部應用程式卻可以編碼,不斷呼叫登入API進行密碼嘗試。所以如果沒有一個資料庫層面的安全控制,這將是非常危險的。
從Oracle 11.1開始,資料庫會在對同一個使用者3次錯誤的密碼嘗試之後,開始鎖定這個使用者3秒鐘,才允許下一次登入。這個鎖定時間將從3秒逐漸延長,不斷增加。
所有以該使用者登入的session都會等待“row cache lock”,哪怕他是用正確的密碼登入的。
很多使用者不理解這樣做是為了幫助使用者避免風險,而對看到的“row cache lock”等待提出抱怨。
所以Oracle在Bug 7715339的修復中提供了一個方法(event 28401)來繞過這段程式碼,來供使用者做不同選擇。
event="28401 trace name context forever, level 1" # disable logon delay
必須說明的是,這實際上並不是一個bug,而是一個功能增強。使用者必須清楚如果設定了這個事件,將使您的資料庫暴露在密碼猜測的風險之下。
Bug 7715339的修復被包含在11.2.0.1 PSU之中。而在11.1.0.7上打補丁7715339,預設已經相當於開啟event 28401了。
在11.2.0.2之後,Oracle修改程式碼,將這一段“row cache lock”等待修改成了“library cache lock”等待。
總結一下:
1)11.1.0.X上,錯誤的使用者名稱密碼登入,將導致顯著的“row cache lock”等待。
使用者可以在11.1.0.7上打補丁7715339,不用設定event 28401,就可繞過這段安全控制程式碼。
2)11.2.0.1上,錯誤的使用者名稱密碼登入,將導致顯著的“row cache lock”等待。
使用者不用打補丁(因為已經包含在11.2.0.1中了),直接設定event 28401,就可繞過這段安全控制程式碼。
3)11.2.0.2以上的版本(包含11.2.0.2),錯誤的使用者名稱密碼登入,將導致顯著的“library cache lock”等待。
使用者不用打補丁(因為已經包含在11.2.0.1中了),直接設定event 28401,就可繞過這段安全控制程式碼。
必須再次說明的是,使用者必須清楚如果打補丁或者設定了這個事件,將使您的資料庫暴露在密碼猜測的風險之下。
正題:
有使用者反饋,即使設定了event 28401,仍會觀察到錯誤的使用者名稱密碼登入導致“library cache lock”等待,這是為什麼呢?為此,我們做了以下測試進行說明:
起10個程式,同時進行錯誤的使用者名稱密碼登入,並測試未設定event 28401和設定event 28401進行比較,從V$SYSTEM_EVENT中多次觀察獲取平均等待時間:
select total_waits,Time_waited_fg/total_waits
from V$SYSTEM_EVENT
where event='library cache lock'
未設定event 28401:
91 1395.252747252747252747252747252747252747
98 2352.959183673469387755102040816326530612
106 2687.698113207547169811320754716981132075
116 3495.862068965517241379310344827586206897
<========library cache lock的平均等待時間很快從13.95秒逐漸增加到34.95秒,並且持續增加。
設定event 28401之後:
23142 2.97325209575663296171463140610146054792
24329 3.03592420568046364421061284886349623906
<========即使在24329次等待之後,library cache lock的平均等待時間仍然穩定在0.03秒。
也就是說,event 28401是生效的,“等待時間從3秒逐漸增加的”的安全機制被繞過了,但是“library cache lock”卻無法避免。
這是因為,錯誤的使用者名稱密碼登入仍會在資料庫內部更新該使用者的登入次數,錯誤登入次數,上次登入時間等資訊,需要申請“library cache lock”。
而“library cache lock”的等待時間跟併發登入的程式數和資料庫效能有關。
如果有多個使用者進行不斷的進行錯誤的密碼嘗試,可能仍會觀察到較高的“library cache lock”等待。
因為“錯誤的密碼嘗試”應用程式的程式碼邏輯一般都是非常瘋狂的,正確的登入可能一次就過了,而一旦錯誤會反覆嘗試並且沒有sleep等待,這將導致一秒鐘可能會發起幾百次上千次的嘗試,
而多個程式併發時就容易觀察到平均等待幾十毫秒甚至幾百毫秒的“library cache lock”了。因為會不斷嘗試,在資料庫層面會累積而很容易觀察到。
但是設定event 28401之後,一般不會有幾十秒上百秒的單次等待了,因為單次遞增的等待機制被繞過了。
總體來講,資料庫管理員應該儘快發現並解決錯誤的使用者名稱密碼登入問題(它們一般是因為資料庫密碼被更改而應用程式沒有及時同步造成的),而不應該過度依賴event 28401。
因為無論從哪個角度來看,錯誤的使用者名稱密碼登入都是一個應用層面的異常問題,是應該被避免的。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12798004/viewspace-1681965/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 資料庫使用者名稱和密碼錯誤:如何解決?資料庫密碼
- 解決 PBootCMS 中因資料庫名稱錯誤導致的“執行 SQL 發生錯誤!錯誤:no such table: ay_config”問題boot資料庫SQL
- 批次錯誤使用者名稱與密碼導致業務使用者HANG住(library cache lock)密碼
- 多次密碼錯誤導致登入介面鎖定,可以刪除網站的 runtime 資料夾密碼網站
- 織夢使用者名稱密碼?織夢提示你的密碼錯誤密碼
- 帝國CMS忘記後臺登陸使用者名稱 密碼 認證碼 安全提問答案 資料庫使用者名稱及密碼的解決方法密碼資料庫
- K8Sdashboard登入問題(chrome無法訪問以及使用使用者名稱和密碼登入)K8SChrome密碼
- 根據教程中,輸錯密碼或使用者名稱後,卻不能返回‘使用者名稱或密碼錯誤’密碼
- 關於登入(使用者名稱,密碼,驗證碼)密碼
- 織夢dedecms無法登入後臺,提示使用者名稱或密碼錯誤怎麼辦密碼
- mongodb對資料庫建立使用者名稱和密碼MongoDB資料庫密碼
- Android studio 連線sqlist資料庫,賬號密碼錯誤仍能登入的原因AndroidSQL資料庫密碼
- 資料庫連線錯誤:您在wp-config.php檔案中提供的資料庫使用者名稱和密碼可能不正確資料庫PHP密碼
- win10 smb使用者名稱密碼錯誤怎麼解決_win10電腦smb使用者名稱密碼錯誤修復方法Win10密碼
- 【C++小專案---3】連線資料庫檢測使用者名稱密碼、實現登入C++資料庫密碼
- SQLServer刪除登入記錄使用者名稱和密碼SQLServer密碼
- 易優eyoucms網站正確上傳了模版,也設定好了資料庫。網站能正常訪問,但提示使用者名稱密碼錯誤 ,後臺登入不上網站資料庫密碼
- 資料庫本地,sqlplus和資料庫工具連線資料庫正常,但是JDBC連線資料庫出現了一直提示使用者名稱/密碼錯誤資料庫SQLJDBC密碼
- 本地oracle資料庫忘記使用者名稱密碼解決方案Oracle資料庫密碼
- 重置資料庫密碼後導致網站無法訪問資料庫密碼網站
- macbook開機登入時輸入正確的密碼卻提示密碼錯誤Mac密碼
- 安裝帝國系統時 出現您的資料庫使用者名稱或密碼有誤,連結不上MYSQL資料庫?資料庫密碼MySql
- ssm+shrio 在登入時輸入的賬號密碼與資料庫一致,但還是報錯SSM密碼資料庫
- 使用者名稱和密碼輸入練習密碼
- 破解 MySQL5.7 資料庫的 root 登入密碼MySql資料庫密碼
- 破解 MariaDB5.5 資料庫的 root 登入密碼資料庫密碼
- 如何解決非同步介面請求快慢不均導致的資料錯誤問題? - DevUI非同步devUI
- 使用資料庫處理併發可能導致的問題資料庫
- 線上直播原始碼,完整登陸頁面的全部資訊(包括使用者名稱、輸入密碼等)原始碼密碼
- 【北亞資料恢復】輸入錯誤命令導致MySQL資料庫資料被刪除的資料恢復案例資料恢復MySql資料庫
- 【oracle資料庫資料恢復】誤操作導致的資料庫誤刪除的資料恢復案例Oracle資料庫資料恢復
- 【資料庫資料恢復】磁碟空間不足導致sql server錯誤的資料恢復資料庫資料恢復SQLServer
- Auth::logoutOtherDevices 導致密碼錯誤問題Godev密碼
- 通過jquery.cookie.js實現記住使用者名稱、密碼登入功能jQueryCookieJS密碼
- 關於 iconv 轉碼導致資料丟失的問題
- 記錄一個由於倉庫層錯誤導致軟刪除失效的問題
- python輸入錯誤密碼使用者鎖定Python密碼
- MySQL8.0 view導致的效能問題MySqlView
- git 使用者名稱密碼相關Git密碼