溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Oracle11g 密碼延遲認(rèn)證導(dǎo)致library cache lock的情況分析

發(fā)布時(shí)間:2020-08-07 18:25:06 來源:ITPUB博客 閱讀:151 作者:張沖andy 欄目:關(guān)系型數(shù)據(jù)庫(kù)

在 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í)情況:

Oracle11g 密碼延遲認(rèn)證導(dǎo)致library cache lock的情況分析

在這類情況下,時(shí)間模型 - Time Model 中會(huì)顯示如下指標(biāo),其中 connection management call elapsed time 占據(jù)了主要的DB Time,這個(gè)等待直接表明是在建立數(shù)據(jù)庫(kù)連接時(shí)產(chǎn)生的:

Oracle11g 密碼延遲認(rèn)證導(dǎo)致library cache lock的情況分析

這類問題,在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)上摘取下來別人的案例

1,問題來源

以前遇到了問題修改了用戶名密碼后,發(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ù)完全正常)

2,案例演示

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住了。

3,新特性是雙刃劍

Oracle的任何一個(gè)新特性都能帶來性能上的提升和安全上的進(jìn)一步保證,但是畢竟oracle也只是一個(gè)軟件software而已,是software就會(huì)有bug,甚至被別人利用攻擊了。

oracle在11g發(fā)布后的幾個(gè)小版本中,沒有給出徹底屏幕密碼延遲的方法,但是oracle有強(qiáng)大的其它輔助功能,可以通過設(shè)置event事件來處理掉。

4,通過設(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


向AI問一下細(xì)節(jié)

免責(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)容。

AI