您好,登錄后才能下訂單哦!
在 Oracle 11g 中,為了提升安全性,Oracle 引入了『密碼延遲驗(yàn)證』的新特性。這個(gè)特性的作用是,如果用戶輸入了錯(cuò)誤的密碼嘗試登錄,那么隨著登錄錯(cuò)誤次數(shù)的增加,每次登錄前驗(yàn)證的時(shí)間也會(huì)增加,以此減緩可能對(duì)于數(shù)據(jù)庫(kù)重復(fù)的口令嘗試攻擊。
但是對(duì)于正常的系統(tǒng),由于口令的更改,可能存在某些被遺漏的客戶端,不斷重復(fù)嘗試,從而引起數(shù)據(jù)庫(kù)內(nèi)部長(zhǎng)時(shí)間的 Library Cache Lock的等待,這種情形非常常見。
如果遇到這一類問題,可以通過Event 28401關(guān)閉這個(gè)特性,從而消除此類影響,以下命令將修改設(shè)置在參數(shù)文件中:
ALTER SYSTEM SET EVENT =
'28401 TRACE NAME CONTEXT FOREVER, LEVEL 1' SCOPE = SPFILE;
出現(xiàn)這類問題非常典型的AWR報(bào)告呈現(xiàn)如下,首先在 TOP 5 中,你可能看到顯著的 Library Cache Lock 的等待 ,如果用sql查等待時(shí)間,則username列為空,以下范例來自11.2.0.3.0版本的真實(shí)情況:
在這類情況下,時(shí)間模型 - Time Model 中會(huì)顯示如下指標(biāo),其中 connection management call elapsed time 占據(jù)了主要的DB Time,這個(gè)等待直接表明是在建立數(shù)據(jù)庫(kù)連接時(shí)產(chǎn)生的:
這類問題,在Oracle的11g中是常見和確定的,在MOS上可以找到相應(yīng)的記錄:High 'library cache lock' Wait Time Due to Invalid Login Attempts(1309738.1)此外Oracle 11g開啟了密碼大小寫驗(yàn)證,如果從Oracle 10g升級(jí)過來,需要特別的當(dāng)心這個(gè)變化,通過初始化參數(shù)SEC_CASE_SENSITIVE_LOGON 可以來控制這個(gè)特性。
下面是一個(gè)案例:網(wǎng)上摘取下來別人的案例
以前遇到了問題修改了用戶名密碼后,發(fā)現(xiàn)用新密碼登錄被hang住的情況,然后整個(gè)公司的oa系統(tǒng)徹底癱瘓了,詳細(xì)狀況見以前的記錄。
最近學(xué)習(xí)了oracle11g的新特性密碼延遲,才明白問題所在是由于密碼延遲導(dǎo)致。
大概情況是:從oracle11g開始,如果用戶輸入了錯(cuò)誤的密碼登錄,那么隨著登錄錯(cuò)誤次數(shù)的增加,每次登錄前等待驗(yàn)證的時(shí)間也會(huì)增加,本意上是為了保護(hù)數(shù)據(jù)庫(kù)被惡意登錄的時(shí)候消耗太多db資源導(dǎo)致數(shù)據(jù)庫(kù)消耗過高導(dǎo)致數(shù)據(jù)庫(kù)服務(wù)器出問題,但是這里也引發(fā)了問題,如果使用錯(cuò)誤密碼登錄過多,則會(huì)影響該用戶的正常登錄,也就是說密碼有驗(yàn)證延遲導(dǎo)致你輸入正確的密碼登錄也需要等待很久。給使用人員的體驗(yàn)就是數(shù)據(jù)庫(kù)hang住了(其實(shí)你使用其它用戶操作數(shù)據(jù)庫(kù)完全正常)
Oracle版本是11g分支11.2.0.1.0:
Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.1.0
Connected as timdba@A_VM128
SQL>
設(shè)置時(shí)間顯示: SQL> set time on; 07:41:57 SQL> conn timdba/timgood; Connected. 07:42:48 SQL> conn timdba/t;#開始嘗試錯(cuò)誤密碼登錄 ERROR: ORA-01017: invalid username/password; logon denied Warning: You are no longer connected to ORACLE. 07:42:49 SQL> conn timdba/t; #第1次錯(cuò)誤登錄消耗時(shí)間1秒 ERROR: ORA-01017: invalid username/password; logon denied 07:42:51 SQL> conn timdba/t; # 第2次錯(cuò)誤登錄消耗時(shí)間2秒 ERROR: ORA-01017: invalid username/password; logon denied 07:42:52 SQL> conn timdba/t; # 第3次錯(cuò)誤登錄消耗時(shí)間1秒 ERROR: ORA-01017: invalid username/password; logon denied 07:42:54 SQL> conn timdba/t; # 第4次錯(cuò)誤登錄消耗時(shí)間2秒 ERROR: ORA-01017: invalid username/password; logon denied 07:42:57 SQL> conn timdba/t; #第5次錯(cuò)誤登錄消耗時(shí)間3秒 ERROR: ORA-01017: invalid username/password; logon denied 07:43:02 SQL> conn timdba/t; # 第6次錯(cuò)誤登錄消耗時(shí)間5秒 ERROR: ORA-01017: invalid username/password; logon denied 07:43:07 SQL> conn timdba/t; # 第7次錯(cuò)誤登錄消耗時(shí)間5秒 ERROR: ORA-01017: invalid username/password; logon denied 07:43:13 SQL> conn timdba/t; # 第8次錯(cuò)誤登錄消耗時(shí)間6秒 ERROR: ORA-01017: invalid username/password; logon denied 07:43:20 SQL> conn timdba/t;# 第9次錯(cuò)誤登錄消耗時(shí)間7秒 ERROR: ORA-01017: invalid username/password; logon denied 07:43:28 SQL> 07:43:29 SQL> conn timdba/timgood; Connected. 07:43:40 SQL> |
大家可以看到第4次,第5次開始,錯(cuò)誤登錄驗(yàn)證時(shí)間越來越長(zhǎng)了。基本每次都延遲多一秒,而后面即使輸入了正確密碼,也會(huì)延遲十幾秒了。
而在測(cè)試過程中,一旦輸入正確密碼,驗(yàn)證成功過后,這個(gè)錯(cuò)誤延時(shí)就會(huì)清0,從0開始重新計(jì)算數(shù)字了:
08:15:30 SQL> conn timdba/t; ERROR: ORA-01017: invalid username/password; logon denied 08:15:34 SQL> conn timdba/timgood; Connected. 08:15:37 SQL> conn timdba/t; ERROR: ORA-01017: invalid username/password; logon denied Warning: You are no longer connected to ORACLE. 08:15:39 SQL> conn timdba/t; ERROR: ORA-01017: invalid username/password; logon denied 08:15:40 SQL> |
大家進(jìn)一步擴(kuò)散下思維,這只是單個(gè)session做測(cè)試的,如果是線上環(huán)境的話,成千上萬個(gè)會(huì)話過來,如果密碼都錯(cuò)誤了,一起延時(shí)的話,按照一個(gè)操作多延遲一秒來算,基本要延遲1000秒了,也就是半個(gè)小時(shí)你登錄界面卡在哪里了,這樣給客戶的體驗(yàn)就是輸入了正確密碼,結(jié)果點(diǎn)擊了登錄按鈕,就卡住了,死活不動(dòng)彈了,服務(wù)器癱瘓了,也就意味著應(yīng)用系統(tǒng)hang住了。
Oracle的任何一個(gè)新特性都能帶來性能上的提升和安全上的進(jìn)一步保證,但是畢竟oracle也只是一個(gè)軟件software而已,是software就會(huì)有bug,甚至被別人利用攻擊了。
oracle在11g發(fā)布后的幾個(gè)小版本中,沒有給出徹底屏幕密碼延遲的方法,但是oracle有強(qiáng)大的其它輔助功能,可以通過設(shè)置event事件來處理掉。
這里一般通常設(shè)置28401就足夠了,如果遇到其它特殊情況,也可以再設(shè)置一下,接下來通過設(shè)置EVENTS 28401來實(shí)現(xiàn)屏蔽密碼延遲驗(yàn)證:
ALTER SYSTEM SET EVENT = '28401 TRACE NAMECONTEXT FOREVER, LEVEL 1' SCOPE = SPFILE;
alter system set event="10949 TRACENAME CONTEXT FOREVER:28401 trace name context forever, level 1" scope=spfile;
SQL> set time on; 08:56:22 SQL> ALTER SYSTEM SET EVENT = '28401 TRACE NAME CONTEXT FOREVER, LEVEL 1' SCOPE = SPFILE; System altered. 08:56:27 SQL> create pfile from spfile; File created. 08:56:29 SQL> |
之后重啟oracle數(shù)據(jù)庫(kù)生效了。
08:56:44 SQL> shutdown immediate; Database closed. Database dismounted. ORACLE instance shut down. 08:57:05 SQL> startup; ORACLE instance started. Total System Global Area 835104768 bytes Fixed Size 2217952 bytes Variable Size 545261600 bytes Database Buffers 281018368 bytes Redo Buffers 6606848 bytes Database mounted. Database opened. 08:57:46 SQL> |
再次驗(yàn)證錯(cuò)誤密碼延遲驗(yàn)證,可以看到幾乎沒有任何延遲了:
08:58:28 SQL> conn timdba/timgood; Connected. 08:58:33 SQL> conn timdba/t; ERROR: ORA-01017: invalid username/password; logon denied Warning: You are no longer connected to ORACLE. 08:58:37 SQL> conn timdba/t; ERROR: ORA-01017: invalid username/password; logon denied 08:58:38 SQL> conn timdba/t; ERROR: ORA-01017: invalid username/password; logon denied 08:58:39 SQL> conn timdba/t; ERROR: ORA-01017: invalid username/password; logon denied 08:58:39 SQL> conn timdba/t; ERROR: ORA-01017: invalid username/password; logon denied 08:58:40 SQL> conn timdba/t; ERROR: ORA-01017: invalid username/password; logon denied 08:58:41 SQL> conn timdba/t; ERROR: ORA-01017: invalid username/password; logon denied 08:58:42 SQL> conn timdba/t; ERROR: ORA-01017: invalid username/password; logon denied |
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。