錯誤的使用者名稱密碼登入導致的資料庫效能問題
從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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 資料庫使用者名稱和密碼錯誤:如何解決?資料庫密碼
- linux samba配置問題(未知的使用者名稱或密碼錯誤)LinuxSamba密碼
- 關於訪問資料庫的使用者名稱和密碼資料庫密碼
- DNS導致資料庫登入緩慢的問題解決DNS資料庫
- 批次錯誤使用者名稱與密碼導致業務使用者HANG住(library cache lock)密碼
- 批量錯誤使用者名稱與密碼導致業務使用者HANG住(library cache lock)密碼
- win7訪問共享資料夾提示“未知的使用者名稱或密碼錯誤”Win7密碼
- Oracle資料庫導致效能問題的可能原因Oracle資料庫
- memlock過低導致的資料庫效能問題資料庫
- O/S-Error: (OS 1326) 登入失敗: 未知的使用者名稱或錯誤密碼。Error密碼
- 常見問題--oracle10g使用者名稱密碼以及登入方式Oracle密碼
- K8Sdashboard登入問題(chrome無法訪問以及使用使用者名稱和密碼登入)K8SChrome密碼
- 關於登入(使用者名稱,密碼,驗證碼)密碼
- SQL SERVER 使用者名稱、密碼登入判斷SQLServer密碼
- 根據教程中,輸錯密碼或使用者名稱後,卻不能返回‘使用者名稱或密碼錯誤’密碼
- 登入判斷使用者名稱和密碼是否正確的程式碼(連結和讀取資料庫)密碼資料庫
- 奇怪的問題: 資料庫使用者登入的時候報錯資料庫
- JS實現簡單的登入介面(不連線資料庫,把使用者名稱密碼寫死)JS資料庫密碼
- ORACLE資料檔名導致的奇怪問題Oracle
- 資料庫統計資訊不更新導致的效能問題資料庫
- mongodb對資料庫建立使用者名稱和密碼MongoDB資料庫密碼
- Oracle10g 輸入使用者名稱稱10次密碼錯誤,使用者會鎖定Oracle密碼
- 【C++小專案---3】連線資料庫檢測使用者名稱密碼、實現登入C++資料庫密碼
- sys密碼修改導致的RMAN-00571錯誤密碼
- SQLServer刪除登入記錄使用者名稱和密碼SQLServer密碼
- win10 smb使用者名稱密碼錯誤怎麼解決_win10電腦smb使用者名稱密碼錯誤修復方法Win10密碼
- 關於資料庫登陸名和資料庫使用者名稱的一點點心得資料庫
- win8系統如何取消使用者名稱密碼登入密碼
- 配置samba的訪問密碼和使用者名稱Samba密碼
- ORA-01034,修改主機名導致的資料庫問題資料庫
- Android studio 連線sqlist資料庫,賬號密碼錯誤仍能登入的原因AndroidSQL資料庫密碼
- 資料庫連線錯誤:您在wp-config.php檔案中提供的資料庫使用者名稱和密碼可能不正確資料庫PHP密碼
- 易優eyoucms網站正確上傳了模版,也設定好了資料庫。網站能正常訪問,但提示使用者名稱密碼錯誤 ,後臺登入不上網站資料庫密碼
- 本地oracle資料庫忘記使用者名稱密碼解決方案Oracle資料庫密碼
- 關於oracle的幾個概念:資料庫、例項、使用者名稱和密碼Oracle資料庫密碼
- sysdba登入 ORA-01017:使用者名稱密碼出錯 故障排查例項密碼
- TSM配置不好導致備份不正常,從而導致資料庫效能問題資料庫
- 資料庫本地,sqlplus和資料庫工具連線資料庫正常,但是JDBC連線資料庫出現了一直提示使用者名稱/密碼錯誤資料庫SQLJDBC密碼