11g新特性 密碼錯誤驗證延遲特性的相關驗證
2015年最後一天了,加班現場,做一個小小實驗,來完結這一年。
測試目的:
起因 是晚上看到微信群裡有人說有11.2.0.4資料庫出現一個使用者間歇性的出現登陸很慢,需要10幾秒;其它使用者都正常。對此懷疑主機名解析類問題或者是密碼錯誤後的延遲觸發特性,這些都被提問題的說是查過了,於是提議做一個trace 登陸過程,無後續;
於是想到驗證一個使用者錯誤密碼導致延遲很大,是否影響其它使用者的登陸速度。(雖然我覺得不會影響,還是驗證一下,實驗為準哈哈)
本次主要驗證:
關於此特性:
密碼錯誤驗證延遲,可以通過設定EVENT="28401 TRACE NAME CONTEXT FOREVER, LEVEL 1"遮蔽
alter system set events='28401 trace name context forever, level 1'; ---不需要重啟
如多個應用使用同一使用者登陸且密碼出錯,由於密碼延遲驗證的策略,導致所有後續的連線都被HANG住以及row cache lock、library cache lock問題。
本次只討論錯誤延遲的問題。
本次實驗結果彙總:
1.同一使用者,使用錯誤密碼登陸會觸發此問題;但是如果同一會話後續使用了正確的密碼的那一次登陸速度立刻恢復正常。
2.一個使用者錯誤輸入密碼後登陸延遲對其它使用者使用正確密碼時沒有影響。同一會話其它使用者的正確密碼對發生錯誤延遲的使用者沒有影響,會仍然有延遲。
3.在當前視窗執行使用錯誤密碼登陸,延遲越來越大;然後新開視窗進行正確密碼登陸,第一次時使用了3s-->此時第一個視窗也正在登陸,可能是因此原因導致新視窗正確的密碼執行時也較慢。對此進行驗證:第一個視窗錯誤登陸後延遲10秒時,不執行新命令;第二個視窗使用正確密碼登陸,可以正常進行。
一個使用者錯誤輸入密碼後登陸延遲對其它使用者沒有影響。
同一會話其它使用者的正確密碼對已經發生錯誤延遲的使用者沒有影響,會仍然有延遲。
---------------三次測試語句及結果如下:
第一次:
使用錯誤密碼的命令:
time echo "select sysdate from dual;" | sqlplus -s bys/bys1 1> /dev/null 2>&1
time echo "select sysdate from dual;" | sqlplus -s bys/bys1 1> /dev/null 2>&1
time echo "select sysdate from dual;" | sqlplus -s bys/bys1 1> /dev/null 2>&1
time echo "select sysdate from dual;" | sqlplus -s bys/bys1 1> /dev/null 2>&1
time echo "select sysdate from dual;" | sqlplus -s bys/bys1 1> /dev/null 2>&1
time echo "select sysdate from dual;" | sqlplus -s bys/bys1 1> /dev/null 2>&1
time echo "select sysdate from dual;" | sqlplus -s bys/bys1 1> /dev/null 2>&1
time echo "select sysdate from dual;" | sqlplus -s bys/bys1 1> /dev/null 2>&1
time echo "select sysdate from dual;" | sqlplus -s bys/bys1 1> /dev/null 2>&1
time echo "select sysdate from dual;" | sqlplus -s bys/bys 1> /dev/null 2>&1
time echo "select sysdate from dual;" | sqlplus -s bys/bys 1> /dev/null 2>&1
--當前會話
使用當前使用者正確密碼
time echo "select sysdate from dual;" | sqlplus -s bys/bys 1> /dev/null 2>&1
time echo "select sysdate from dual;" | sqlplus -s bys/bys 1> /dev/null 2>&1
驗證結果如下:
同一使用者,使用錯誤密碼登陸會觸發此問題;但是如果同一會話後續使用了正確的密碼的那一次登陸速度立刻恢復正常。
time echo "select sysdate from dual;" | sqlplus -s bys/bys 1> /dev/null 2>&1
real 0m0.129s
user 0m0.019s
sys 0m0.019s
省略部分輸出
[oracle@bys1 ~]$ time echo "select sysdate from dual;" | sqlplus -s bys/bys1 1> /dev/null 2>&1
real 0m6.080s
user 0m0.016s
sys 0m0.009s
[oracle@bys1 ~]$ time echo "select sysdate from dual;" | sqlplus -s bys/bys 1> /dev/null 2>&1
real 0m0.095s
user 0m0.015s
sys 0m0.014s
----------------------------
第二次:
使用錯誤密碼的命令:
time echo "select sysdate from dual;" | sqlplus -s bys/bys1 1> /dev/null 2>&1
time echo "select sysdate from dual;" | sqlplus -s bys/bys1 1> /dev/null 2>&1
time echo "select sysdate from dual;" | sqlplus -s bys/bys1 1> /dev/null 2>&1
time echo "select sysdate from dual;" | sqlplus -s bys/bys1 1> /dev/null 2>&1
time echo "select sysdate from dual;" | sqlplus -s bys/bys1 1> /dev/null 2>&1
time echo "select sysdate from dual;" | sqlplus -s bys/bys1 1> /dev/null 2>&1
time echo "select sysdate from dual;" | sqlplus -s bys/bys1 1> /dev/null 2>&1
time echo "select sysdate from dual;" | sqlplus -s bys/bys1 1> /dev/null 2>&1
time echo "select sysdate from dual;" | sqlplus -s bys/bys1 1> /dev/null 2>&1
time echo "select sysdate from dual;" | sqlplus -s bys/bys1 1> /dev/null 2>&1
--------新開會話
使用當前使用者正確密碼
time echo "select sysdate from dual;" | sqlplus -s bys/bys 1> /dev/null 2>&1
time echo "select sysdate from dual;" | sqlplus -s bys/bys 1> /dev/null 2>&1
實驗結果:
在當前視窗執行使用錯誤密碼登陸,延遲越來越大;然後新開視窗進行正確密碼登陸,第一次時使用了3s。
此時第一個視窗也正在登陸,可能是因此原因新視窗正確的密碼執行時也較慢。
後面有實驗第一個視窗錯誤登陸後延遲10秒時,不執行新命令;第二個視窗使用正確密碼登陸,可以正常進行。
[oracle@bys1 ~]$ date
Thu Dec 31 23:14:57 CST 2015
[oracle@bys1 ~]$ time echo "select sysdate from dual;" | sqlplus -s bys/bys1 1> /dev/null 2>&1
real 0m0.077s
user 0m0.011s
sys 0m0.014s
省略部分輸出
[oracle@bys1 ~]$ time echo "select sysdate from dual;" | sqlplus -s bys/bys1 1> /dev/null 2>&1
real 0m6.092s
user 0m0.016s
sys 0m0.013s
[oracle@bys1 ~]$ time echo "select sysdate from dual;" | sqlplus -s bys/bys1 1> /dev/null 2>&1
real 0m0.132s
user 0m0.015s
sys 0m0.006s
此時在其它視窗:
[oracle@bys1 ~]$ time echo "select sysdate from dual;" | sqlplus -s bys/bys 1> /dev/null 2>&1
real 0m3.165s
user 0m0.019s
sys 0m0.015s
[oracle@bys1 ~]$ time echo "select sysdate from dual;" | sqlplus -s bys/bys 1> /dev/null 2>&1
real 0m0.117s
user 0m0.016s
sys 0m0.006s
[oracle@bys1 ~]$ date
Thu Dec 31 23:16:09 CST 2015
---------------實驗第一個視窗錯誤登陸後延遲10秒時,不執行新命令;第二個視窗使用正確密碼登陸,可以正常進行。
[oracle@bys1 ~]$ date
Thu Dec 31 23:28:57 CST 2015
[oracle@bys1 ~]$ time echo "select sysdate from dual;" | sqlplus -s bys/bys1 1> /dev/null 2>&1
time echo "select sysdate from dual;" | sqlplus -s bys/bys1 1> /dev/null 2>&1
time echo "select sysdate from dual;" | sqlplus -s bys/bys1 1> /dev/null 2>&1
time echo "select sysdate from dual;" | sqlplus -s bys/bys1 1> /dev/null 2>&1
time echo "select sysdate from dual;" | sqlplus -s bys/bys1 1> /dev/null 2>&1
time echo "select sysdate from dual;" | sqlplus -s bys/bys1 1> /dev/null 2>&1
real 0m10.115s
user 0m0.020s
sys 0m0.017s
[oracle@bys1 ~]$ time echo "select sysdate from dual;" | sqlplus -s bys/bys1 1> /dev/null 2>&1
real 0m10.080s
user 0m0.014s
sys 0m0.012s
[oracle@bys1 ~]$ time echo "select sysdate from dual;" | sqlplus -s bys/bys1 1> /dev/null 2>&1
^C
real 0m0.809s
user 0m0.014s
sys 0m0.013s
[oracle@bys1 ~]$ date
Thu Dec 31 23:29:32 CST 2015
--------------------
第三次:
使用錯誤密碼的命令:
time echo "select sysdate from dual;" | sqlplus -s bys/bys1 1> /dev/null 2>&1
time echo "select sysdate from dual;" | sqlplus -s bys/bys1 1> /dev/null 2>&1
time echo "select sysdate from dual;" | sqlplus -s bys/bys1 1> /dev/null 2>&1
time echo "select sysdate from dual;" | sqlplus -s bys/bys1 1> /dev/null 2>&1
time echo "select sysdate from dual;" | sqlplus -s bys/bys1 1> /dev/null 2>&1
time echo "select sysdate from dual;" | sqlplus -s bys/bys1 1> /dev/null 2>&1
time echo "select sysdate from dual;" | sqlplus -s bys/bys1 1> /dev/null 2>&1
time echo "select sysdate from dual;" | sqlplus -s bys/bys1 1> /dev/null 2>&1
time echo "select sysdate from dual;" | sqlplus -s bys/bys1 1> /dev/null 2>&1
time echo "select sysdate from dual;" | sqlplus -s bys/bys1 1> /dev/null 2>&1
time echo "select sysdate from dual;" | sqlplus -s test/test 1> /dev/null 2>&1
time echo "select sysdate from dual;" | sqlplus -s test/test 1> /dev/null 2>&1
--------同樣會話
使用其它使用者正確密碼
time echo "select sysdate from dual;" | sqlplus -s test/test 1> /dev/null 2>&1
time echo "select sysdate from dual;" | sqlplus -s test/test 1> /dev/null 2>&1
實驗結果:
一個使用者錯誤輸入密碼後登陸延遲對其它使用者沒有影響。
同一會話其它使用者的正確密碼對已經發生錯誤延遲的使用者沒有影響,會仍然有延遲。
[oracle@bys1 ~]$ time echo "select sysdate from dual;" | sqlplus -s bys/bys1 1> /dev/null 2>&1
real 0m5.123s
user 0m0.024s
sys 0m0.019s
[oracle@bys1 ~]$ time echo "select sysdate from dual;" | sqlplus -s bys/bys1 1> /dev/null 2>&1
real 0m6.099s
user 0m0.022s
sys 0m0.015s
[oracle@bys1 ~]$ time echo "select sysdate from dual;" | sqlplus -s bys/bys1 1> /dev/null 2>&1
real 0m7.067s
user 0m0.009s
sys 0m0.014s
[oracle@bys1 ~]$ time echo "select sysdate from dual;" | sqlplus -s test/test 1> /dev/null 2>&1
real 0m0.085s
user 0m0.016s
sys 0m0.013s
[oracle@bys1 ~]$ time echo "select sysdate from dual;" | sqlplus -s test/test 1> /dev/null 2>&1
real 0m0.071s
user 0m0.010s
sys 0m0.011s
---------------------------
其它使用者的正確密碼對發生錯誤延遲的使用者沒有影響,會仍然有延遲
[oracle@bys1 ~]$ time echo "select sysdate from dual;" | sqlplus -s bys/bys1 1> /dev/null 2>&1
real 0m8.106s
user 0m0.019s
sys 0m0.025s
[oracle@bys1 ~]$ time echo "select sysdate from dual;" | sqlplus -s test/test 1> /dev/null 2>&1
real 0m0.102s
user 0m0.017s
sys 0m0.018s
[oracle@bys1 ~]$ time echo "select sysdate from dual;" | sqlplus -s bys/bys1 1> /dev/null 2>&1
real 0m9.117s
user 0m0.017s
sys 0m0.021s
相關文章
- ORACLE密碼錯誤驗證延遲Oracle密碼
- ORACLE 11g的密碼錯誤延時驗證Oracle密碼
- 延遲密碼驗證特性引起的資料庫HANG死及當機密碼資料庫
- Oracle資料庫密碼延遲驗證Oracle資料庫密碼
- volatile的特性程式碼驗證
- Oracle 11g 密碼延遲認證與 library cache lock 等待Oracle密碼
- Exadata修改sshd密碼驗證方式 延遲10分鐘關閉 明明密碼對了卻登入不上密碼
- ACCESS 密碼驗證/文字驗證中的小坑密碼
- ZBlog關閉驗證碼功能(出現驗證碼出錯請關閉)
- 驗證碼的作用和相關技術
- 幽默:證明真人的新驗證碼
- 顯示驗證的錯誤資訊
- 使用表單驗證,建立資料驗證層,Ajax 統一返回驗證錯誤資訊
- 重寫 request 驗證 422 錯誤
- 晶片驗證的相關概念(轉載)晶片
- SQL資料庫開發中的SSIS 延遲驗證方法SQL資料庫
- 驗證碼原理及驗證
- Request 驗證錯誤沒有返回錯誤資訊?
- 無密碼驗證:客戶端密碼客戶端
- jQuery Validate驗證除錯開關jQuery除錯
- 使用 Java 操作 Git-驗證相關JavaGit
- 使用Docker部署帶密碼驗證的RedisDocker密碼Redis
- 驗證碼---js重新整理驗證碼JS
- Laravel 的 Validation 檢索驗證錯誤訊息Laravel
- jQuery Validate獲取驗證錯誤的數目jQuery
- 關於登入(使用者名稱,密碼,驗證碼)密碼
- JavaScript驗證碼生成和驗證效果JavaScript
- 賬戶、密碼格式···正則驗證密碼
- oracle 開啟複雜密碼驗證Oracle密碼
- 強密碼驗證正規表示式密碼
- jQuery Validate自定義驗證錯誤資訊jQuery
- Laravel 解決 validate 驗證 Ajax 表單請求驗證失敗報 422 錯誤Laravel
- 新!Web身份驗證新標,支援免密登陸Web
- easy-captcha實現驗證碼驗證APT
- 常見驗證碼的弱點與驗證碼識別
- 登入驗證碼生成kaptcha(輸入驗證碼)APT
- 驗證碼機制之驗證碼重複使用
- jquery 驗證密碼一致性jQuery密碼
- jQuery Validate驗證確認密碼是否相同jQuery密碼