我想通過這篇文章,提醒Oracle數(shù)據(jù)庫管理員,在規(guī)劃與實現(xiàn)Oracle數(shù)據(jù)庫安全性方面需要注意的地方,向他們提一些可行的建議。希望這些內(nèi)容能夠幫助他們提高Oracle數(shù)據(jù)庫的安全性。
一、 鎖定不用的帳戶。
在Oracle安裝的時候,會自動建立幾個默認的數(shù)據(jù)庫服務(wù)器帳戶。當(dāng)Oracle數(shù)據(jù)庫安裝完成后,系統(tǒng)會自動把某些帳戶鎖定或者設(shè)置為過期;但同時也會打開一些有用的帳戶,如SYS、SYSTEM、SYSMAN等等。如果安裝了數(shù)據(jù)庫實例,可能還會建立scott帳戶。為了Oracle數(shù)據(jù)庫的安全性考慮,我們最好能夠把一些不用的帳戶鎖定掉。一般來說,若是系統(tǒng)提供的帳戶,我們只需要保留SYS、SYSTEM、SYSMAN這三個用戶名即可,其他的系統(tǒng)自建的用戶名可以鎖定掉。
另外,在數(shù)據(jù)庫維護中,我們還會建立自己的管理員帳戶。如筆者在維護數(shù)據(jù)庫系統(tǒng)的時候,就不喜歡用系統(tǒng)提供的管理員帳戶。而是會先利用他們的帳戶登陸進去,然后建立自己喜歡的用戶名與密碼。所以,當(dāng)數(shù)據(jù)庫系統(tǒng)理有你前任數(shù)據(jù)庫管理員留下來的用戶名而你又不想用的時候,請各位高抬貴手,及早把它鎖定掉。這可以提高數(shù)據(jù)庫的安全性。可惜的是,筆者有時候給客戶進行數(shù)據(jù)庫有償維護的時候,發(fā)現(xiàn)數(shù)據(jù)庫中有很多莫名其妙的管理員帳戶。問他們數(shù)據(jù)庫管理員這些帳戶有什么用時,他們說是前任留下來的,他們也不知道。對于這些帳戶,筆者的建議是,盡快的把他們鎖定掉或者過期掉。不然的話,對于Oracle系統(tǒng)來說,是一顆定時炸彈。一旦爆炸,就會給這個數(shù)據(jù)庫帶來不可換回的損失。
二、 實施口令管理。
這準(zhǔn)確來說,不是筆者的建議,而是Oracle官方的建議。我在參加Oracle培訓(xùn)的時候,他們的教授就跟我們說,應(yīng)該將數(shù)據(jù)庫所提供的基本口令管理準(zhǔn)則,如口令長度歷史紀(jì)錄、復(fù)雜性等等,應(yīng)用于所有的用戶密碼中,并要求所有的管理員帳戶養(yǎng)成定期更改密碼的習(xí)慣。
依賴于密碼管理的數(shù)據(jù)庫系統(tǒng)來說,需要保證密碼在任何時候都是保密的。可是在實際工作中,密碼可能會泄露,如在輸入密碼的時候被人看到或者被人利用密碼竊取工具竊取到密碼等等。故為了更好的控制數(shù)據(jù)庫的安全,Oracle數(shù)據(jù)庫中通過概要文件來保障數(shù)據(jù)庫口令的安全。這可以說是Oracle數(shù)據(jù)庫的一個獨創(chuàng)的功能了。
具體的來說,Oracle在口令管理上,有如下規(guī)則。
1、口令歷史。這跟微軟操作系統(tǒng)中的口令歷史一致。主要是用來指定在一個時間間隔內(nèi)用戶不能使用相同的密碼。我們可以利用CREATE語句創(chuàng)建一個用戶概要文件,雖然利用REUSE_TIME與REUSE_MAX參數(shù)指定間隔天數(shù)。TIME參數(shù)用來指定在多久后可以采用相同的密碼;而MAX參數(shù)則指定,在可以再次使用當(dāng)前口令之前,用戶必須改變該口令的次數(shù)。
2、口令的期限。若一個密碼時間越長,其泄露的幾率越長。最理想的狀態(tài)是,每用過一次后,就修改一次密碼。但是,這顯然不怎么容易實現(xiàn)。所以,我們需要根據(jù)一定的情況,設(shè)置一個密碼有效的最長期限。當(dāng)這個期限過后,原來的密碼就失效,用戶必須重新修改密碼。我們可以利用CREATE語句為某一個用戶創(chuàng)建一個概要文件,然后利用LIFE?_TIME參數(shù)指定口令的最長有效時間。當(dāng)然,也可以為到期的密碼指定延長期。當(dāng)用戶的口令到期后,用戶第一次登陸數(shù)據(jù)庫的時候,用戶需要輸入延長期。在這個延長期內(nèi),用戶仍然可以使用原有的密碼,只是每次登錄數(shù)據(jù)庫,系統(tǒng)都會提醒用戶修改密碼,直到延長期結(jié)束。當(dāng)延長期滿后,用戶必須更改原有的口令。否則的話,系統(tǒng)會一直提醒用戶更改密碼,而拒絕登陸系統(tǒng)。另外,口令的期限往往跟上面的口令歷史一起使用,從而把密碼的安全性提高到一個新的層次。
3、密碼的復(fù)雜性管理。我們都知道,純數(shù)字的密碼要比數(shù)字、字符混合的密碼好破解的多。故為了加強用戶名密碼的安全性,設(shè)置一定的復(fù)雜性密碼管理規(guī)則是必須的。Oracle數(shù)據(jù)庫系統(tǒng)中,提供了很多的密碼復(fù)雜性檢查。如可以規(guī)定密碼的最小長度;可以設(shè)置密碼不能與用戶名相同;可以規(guī)定密碼中必須包含字符、數(shù)字、標(biāo)點符號等等;還可以設(shè)定密碼不能為簡單的單詞以及密碼的前面幾個字符不能夠相同等等。通過這些復(fù)雜性管理,可以最大程度的保障密碼的安全性。如此的話,若想要通過數(shù)字字典破解密碼的話,難度就會比較大。不過,密碼雖然復(fù)雜了,但是用戶最好不要隨便拿張紙記一下,這樣的話,密碼仍然容易泄露。最好把密碼記熟了,然后把紙撕掉或者燒掉,以確保密碼不會被泄露。
三、 帳戶自動鎖定。
我們在利用銀行卡帳戶的時候,當(dāng)密碼輸入錯誤超過一定的次數(shù)時,這卡就會被鎖住。其實,在Oracle數(shù)據(jù)庫中,也可以實現(xiàn)這個目的。當(dāng)某個管理員帳戶,或者普通的帳戶,其失敗的登陸次數(shù)超過了我們指定的次數(shù)時,服務(wù)器就會自動鎖定那個用戶帳號。
一般來說,我們只需要給管理員帳戶設(shè)置自動鎖定策略即可。因為相對于普通用戶來說,由于其不怎么熟悉操作,所以密碼輸入錯誤的幾率會比較高。若我們?yōu)樗麄冊O(shè)置密碼鎖定策略的話,那我們很大一部分工作就是給他們進行解鎖。所以,沒有特殊必要的話,不要給普通帳戶設(shè)置自動鎖定策略,或者說,至少要把這個密碼輸入錯誤次數(shù)設(shè)置的高一點。
另外,若是前臺應(yīng)用程序直接連接到數(shù)據(jù)庫的話,也會有用戶名與密碼。這個用戶名與密碼筆者建議是不要設(shè)置密碼鎖定策略,否則的話,我們維護起來會很麻煩。
四、 合理分配終端用戶的權(quán)限。
終端用戶就是企業(yè)員工實際用的帳戶。針對普通員工的權(quán)限控制,一般有兩種方式。一是通過前臺的應(yīng)用軟件來控制;二是通過數(shù)據(jù)庫的用戶權(quán)限來實現(xiàn)。
如果我們是利用數(shù)據(jù)庫自身的權(quán)限管理器來管理帳戶權(quán)限的話,則我們需要考慮對終端用戶進行分組,然后為這些用戶組創(chuàng)建不同的角色。數(shù)據(jù)庫管理員可以先給每個角色賦予必要的權(quán)限,然后再將這些角色賦予相應(yīng)的用戶組。也就是說,我們不建議直接給用戶賦予相關(guān)的權(quán)限,而是通過角色與組來管理數(shù)據(jù)庫的訪問權(quán)限。在特殊的情況下,如某個權(quán)限只有一個特定的帳戶具有時,則可以直接把權(quán)限賦予這個帳戶。否則的話,我們不建議給用戶直接賦予權(quán)限。