密碼過期導致的用戶鎖定問題


第一章  數據安全:巧妙解決由密碼過期導致的用戶鎖定問題

 數據庫安全問題一直是人們關注的焦點。oracle數據庫使用了多種手段來保證數據庫的安全,如密碼,角色,權限等等。今天我們來討論一下關於oracle的密碼問題。然而,我在這里要講的並不是oracle的安全密碼機制有多么的強大,恰恰相反,我教大家的是,在oracle密碼過期時我們如何在不修改密碼的情況下,使密碼重新有效。

1案例引入

在介紹前我們先來說一個案例,某客戶數據庫做安全加固時,針對profile修改了部分password的安全機制。其中最重要的一點就是設置了PASSWORD_LIFE_TIME(該參數設定密碼過期時間)這一個參數。而當該參數設置完后,客戶又沒有根據設定的安全機制實施一個良好的人工密碼周期性管理策略。PASSWORD_LIFE_TIME 參數所設定的時間到期后,數據庫將該用戶locked,導致業務無法正常連接。從理論上來說,既然密碼過期了,那么重置密碼是唯一的手段,但是重置密碼意味着要修改大量的中間件。這對業務邏輯不熟悉的人來說,還是存在必然的風險的。檢查后發現客戶並沒有設置PASSWORD_REUSE_TIME(該參數設定為相同密碼的重用時間),既然該參數並沒有設置,那么我們可以考慮通過一個臨時密碼來作為中間密碼,通過中間密碼進一步重新設置原密碼。但是這時候又一個問題出現了,客戶並不知道該業務的用戶密碼。再次加大了解決問題的難度。下面我為大家介紹一個較為巧妙的方法來重置oracle的密碼。

2概念普及

在詳細說明本節內容的情況下,需要普及一些小的知識點。對於密碼有效期等問題的管理上,oracle是通過profile文件來進行管理的,其中默認一個default的profile文件。在oracle 9i以及以前版本,oracle對於默認的default profile文件參數值均為UNLIMITED,在10g版本中,將FAILED_LOGIN_ATTEMPTS的值默認設置為10次,也就是說在連續10次輸入錯誤密碼后,oracle將鎖定該用戶,直到用戶被解鎖為止。從11g開始,oracle對密碼文件的管理策略增加了很多,很多之前被設置了UNLIMITED的參數,在11g中都定義了相應的值,雖然這一新特性增加了oracle密碼的安全機制,但是也從一定程度上對我們管理產生了影響。首先我們來說明一下oracle的profile 中關於密碼這一部分的內容。(該默認的profile取自oracle11g環境)

wpsE665.tmp

詳細解釋一下以上參數值:

PASSWORD_LIFE_TIME 180--口令的生命周期,超過這段時間口令可能會自動過期,是否過期要看是否設定了PASSWORD_GRACE_TIME

PASSWORD_GRACE_TIME 7--接着PASSWORD_LIFE_TIME特性,如果PASSWORD_LIFE_TIME的期限已到,那么PASSWORD_GRACE_TIME 的設置是對口令生命周期的一個grace(寬限或者延續),口令到期之后,繼續可以使用的天數,在這段時間內如果我們登錄系統,會有提示,提示系統在幾天內過期。

PASSWORD_REUSE_TIME UNLIMITED --這個特性限制口令在多少天內不能重復使用,默認值為UNLIMITED

PASSWORD_REUSE_MAX UNLIMITED--這個特性是針對PASSWORD_REUSE_TIME的,說明要想在PASSWORD_REUSE_TIME這個參數指定的時間內重復使用當前口令,那么至少需要修改過口令的次數(修改過的口令當然肯定需要和當前口令不同,因為畢竟還有PASSWORD_REUSE_TIME 特性的限制)。

FAILED_LOGIN_ATTEMPTS 10--這個比較好理解,不知道口令的話嘗試登錄的次數,達到這個次數之后賬戶被自動鎖定。

PASSWORD_LOCK_TIME 1 --接着FAILED_LOGIN_ATTEMPTS參數,口令被自動鎖定的時間,達到這個時間之后,下次登錄時系統自動解除對這個賬戶的鎖定。

以上即為oracle對於profile中密碼管理的一些參數解釋。

接下來我們來說明一下oracle中關於用戶鎖定的狀態

wpsE676.tmp

ORACLE數據庫用戶有多種狀態,可查看視圖USER_ASTATUS_MAP。

wpsE677.tmp

可以看到oracle一共提供了9種狀態,而九種狀態可分為兩類:1.基本狀態。2.組合狀態。

前五種是基本狀態:0 OPEN、1 EXPIRED、2 EXPIRED(GRACE)、4 LOCKED(TIMED)、8 LOCKED。

后四種是基本狀態:5 EXPIRED & LOCKED(TIMED)、6 EXPIRED(GRACE) & LOCKED(TIMED)、9 EXPIRED & LOCKED、10 EXPIRED(GRACE) & LOCKED。

后四種的組合狀態可通過狀態號STATUS#獲得其狀態的兩個組合,對於我們常態管理來說我們只需要掌握前面5種即可,以上客戶所發生的問題就是由於對於profile的設置導致的密碼失效的問題。

3巧解密碼過期問題

在上述的客戶案例中,安全加固措施固然是好的,但是沒有客觀考慮到后期密碼維護的問題,而在oracle11G中PASSWORD_LIFE_TIME參數一定程度上也會造成上述客戶的問題,DBA如果不清楚這一特性很容易造成密碼鎖定,這樣一來很難解決。

在10g或者11g環境中,如果profiles的密碼參數被設置后,會導致密碼在規定的時間內過期,鎖定等。此時如果我們繼續去連接,狀態變成EXPIRED或者EXPIRED(GRACE),那么當我們連接后,會提示需要重新設定新的密碼,並且該會話無法連入數據庫,此時如果我們知道該用戶的密碼,那么DBA只需要手工干預一下,重新設定該密碼即可。

在10G環境中,我們仔細查看dba_users這張視圖,對應的PASSWORD這個字段,其實該字段即為我們設置的密碼的HASH值,當我們的密碼過期或者用戶被鎖定后,可以通過該字段來巧妙的規避一下該特性。

查看用戶信息(10G版本)

wpsE678.tmp

我們可以看到,以上的密碼經過加密處理后顯示為一串無序的HASH值。而在11G開始,oracle為了凸顯密碼安全性,將dba_users中的password這一列不再做顯示。

查看用戶信息(11G版本)

wpsE688.tmp

可以看到,從11G開始,oracle將password這一列給隱藏了。

注:Oracle11g在用戶安全性方面的加強,不僅僅是密碼的隱藏,還包括:

wpsE689.tmp

當我們的用戶密碼過期並且被鎖定后,再次登錄將會產生報錯-用戶被鎖定。

如下圖:

wpsE68A.tmp

注意LOCKED和EXPIRED & LOCKED是兩個不同的概念。LOCKED狀態是由於連續的輸錯密碼達到FAILED_LOGIN_ATTEMPTS指定的次數造成的。對於該種故障,我們只需要簡單的給用戶解鎖即可,如下:

wpsE69B.tmp

但是EXPIRED & LOCKED是由於PASSWORD_LIFE_TIME參數導致用戶密碼過期而造成的鎖定,單一的解鎖命令無法解決該問題。此處還涉及到PASSWORD_LIFE_TIME參數造成的密碼修改問題。如下:

wpsE69C.tmp

wpsE6AC.tmp

我們從上面的實驗過程看到,雖然我們將用戶解鎖,但是用戶的狀態僅僅從EXPIRED & LOCKED轉為EXPIRED,並沒有正常的OPEN,重新連接用戶提示輸入新密碼。

此處就產生一個問題,可以想象一下,當提示我們輸入新密碼時,我們勢必需要輸入生產用戶的原密碼,否則將造成業務中間件的密碼與修改的密碼不一致的情況。如果此時我們不知道原密碼,勢必會造成一定的麻煩。此時我們就需要dba_users視圖中的password字段。Password字段雖然已經經過oracle的hash運算並加密(oracle密碼采用用戶名+密碼的組合進行HASH加密),但是我們並不是需要知道該密碼是什么,只是需要利用該字段HASH值來成功的解鎖用戶。

對於一個用戶賦新的密碼,相信大家都很了解:

alter user username identified by password

那么我們就可以利用password的hash值進行巧妙的解鎖,如下:

wpsE6AD.tmp

可以看到,雖然我們不知道該用戶的密碼,但是我們可以通過password的HASH值來重置該密碼。而在11G中,oracle為了提高安全性能,將DBA_USERS.password中的值不做顯示,默認為空。如下:

wpsE6AE.tmp

在11G環境中,我們可以通過USER$基表中查詢得到該值,如下:

wpsE6BF.tmp

運用同樣的命令和方法,我們就可以解決由於密碼過期而導致的用戶鎖定問題。

4技術結論

通過以上的方法,我們可以在不知曉用戶名密碼的情況下,比較巧妙的解決由於密碼過期而導致的用戶鎖定的情況。雖然我們在上述方法中通過HASH值解鎖了用戶,但是無論從安全方面還是是從數據庫的持續穩定運行方面考慮,我們都建議用戶采用安全合理的密碼管理機制,從源頭上杜絕可能的隱患。

About Me

....................................................................................................................................................

本文來自於微信公眾號轉載文章,若有侵權,請聯系小麥苗及時刪除

ITPUB BLOG:http://blog.itpub.net/26736162

QQ:642808185 若加QQ請注明您所正在讀的文章標題

【版權所有,文章允許轉載,但須以鏈接方式注明源地址,否則追究法律責任】

....................................................................................................................................................


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM