取消 11G延遲密碼驗證

pxbibm發表於2014-11-20
新特性在提供方便,安全的同時,也會帶來相應的bug.
11G引入了延遲密碼驗證,在輸入錯誤的密碼後,後續如果還是採用錯誤的密碼登陸,將會導致密碼延遲驗證,
而且會導致失敗登陸延長。
我們透過一個小例子來看看11G引入了延遲密碼驗證新特性。該特性提供個更加安全的同時,也容易產生相應的bug,
在真實的環境中,我們遭遇到了bug.請檢視我的上一篇文章《》
我們使用SQLPLUS 的靜默連結,把相應的時間

SQL> create user test identified by  123;

User created.


SQL> exit
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
[oracle@hrtest ~]$ time echo "select sysdate from dual;" | sqlplus -s test/111 1> /dev/null 2>&1

real 0m0.067s
user 0m0.013s
sys 0m0.015s
[oracle@hrtest ~]$ time echo "select sysdate from dual;" | sqlplus -s test/111 1> /dev/null 2>&1

real 0m0.073s
user 0m0.017s
sys 0m0.011s
[oracle@hrtest ~]$ time echo "select sysdate from dual;" | sqlplus -s test/111 1> /dev/null 2>&1

real 0m0.059s
user 0m0.017s
sys 0m0.009s
[oracle@hrtest ~]$ time echo "select sysdate from dual;" | sqlplus -s test/111 1> /dev/null 2>&1

real 0m1.060s
user 0m0.014s
sys 0m0.014s
[oracle@hrtest ~]$ time echo "select sysdate from dual;" | sqlplus -s test/111 1> /dev/null 2>&1

real 0m2.060s
user 0m0.015s
sys 0m0.013s
[oracle@hrtest ~]$ time echo "select sysdate from dual;" | sqlplus -s test/111 1> /dev/null 2>&1

real 0m3.060s
user 0m0.015s
sys 0m0.015s
[oracle@hrtest ~]$ time echo "select sysdate from dual;" | sqlplus -s test/111 1> /dev/null 2>&1

real 0m4.060s
user 0m0.014s
sys 0m0.014s
[oracle@hrtest ~]$ time echo "select sysdate from dual;" | sqlplus -s test/111 1> /dev/null 2>&1

real 0m5.061s
user 0m0.016s
sys 0m0.012s
[oracle@hrtest ~]$ time echo "select sysdate from dual;" | sqlplus -s test/111 1> /dev/null 2>&1

real 0m6.060s
user 0m0.015s
sys 0m0.016s
[oracle@hrtest ~]$

可以看到從第三次開始,後續的每次登陸導致密碼延遲1秒左右。

如果有多個會話同時登陸,將會導致會話HANG住,出現一些LATCH的競爭。
我們多開幾個回話視窗,一起執行time echo "select sysdate from dual;" | sqlplus -s test/111 1> /dev/null 2>&1
您開幾個視窗在下面的查詢中就會看到多少個library cache lock,我這裡開了4個視窗。
SQL> select sid,username,event,schemaname from v$session order by event;

  取消 11G延遲密碼驗證
這時,即便是用正確的使用者密碼連線,也會一直hang住。
SQL> conn test/123

可以透過如下事件來遮蔽密碼的延遲驗證。

ALTER SYSTEM SET EVENT = '28401 TRACE NAME CONTEXT FOREVER, LEVEL 1' SCOPE = SPFILE

[oracle@test ~]$ oerr ora 28401
28401, 00000, "Event to disable delay after three failed login attempts"
// *Document: NO
// *Cause: N/A
// *Action: Set this event in your environment to disable the login delay
//          which will otherwise take place after three failed login attempts.
// *Note: THIS IS NOT A USER ERROR NUMBER/MESSAGE. THIS DOES NOT NEED TO BE
//        TRANSLATED OR DOCUMENTED.

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12798004/viewspace-1340362/,如需轉載,請註明出處,否則將追究法律責任。

相關文章