導(dǎo)讀:隨著計(jì)算機(jī)的普及以及網(wǎng)絡(luò)的發(fā)展,數(shù)據(jù)庫已經(jīng)不再僅僅是那些程序員所專有的話題,更是被很多人所熟悉的,數(shù)據(jù)安全已經(jīng)不再是以前的“老生長談”,也更不是以前書本上那些“可望不可及”的條條框框。同時(shí),安全問題也是現(xiàn)今最為熱門的話題,也是企業(yè)比較關(guān)心的問題,可見安全問題的重要性,那就大家一起來探討一下Oracle數(shù)據(jù)庫安全問題。
以下就數(shù)據(jù)庫系統(tǒng)不被非法用戶侵入這個(gè)問題作進(jìn)一步的闡述。
一、組和安全性:
在操作系統(tǒng)下建立用戶組也是保證數(shù)據(jù)庫安全性的一種有效方法。Oracle程序?yàn)榱税踩阅康囊话惴譃閮深悾阂活愃械挠脩舳伎蓤?zhí)行,另一類只DBA可執(zhí)行。在Unix環(huán)境下組設(shè)置的配置文件是/etc/group,關(guān)于這個(gè)文件如何配置,請(qǐng)參閱Unix的有關(guān)手冊(cè),以下是保證安全性的幾種方法:
(1)在安裝Oracle Server前,創(chuàng)建數(shù)據(jù)庫管理員組(DBA)而且分配root和Oracle軟件擁有者的用戶ID給這個(gè)組。DBA能執(zhí)行的程序只有710權(quán)限。在安裝過程中SQL*DBA系統(tǒng)權(quán)限命令被自動(dòng)分配給DBA組。
(2)允許一部分Unix用戶有限制地訪問Oracle服務(wù)器系統(tǒng),增加一個(gè)由授權(quán)用戶組的Oracle組,確保給Oracle服務(wù)器實(shí)用例程Oracle組ID,公用的可執(zhí)行程序,比如SQL*Plus,SQL*forms等,應(yīng)該可被這組執(zhí)行,然后該這個(gè)實(shí)用例程的權(quán)限為710,它將允許同組的用戶執(zhí)行,而其他用戶不能。
(3)改那些不會(huì)影響數(shù)據(jù)庫安全性的程序的權(quán)限為711。(注:在我們的系統(tǒng)中為了安裝和調(diào)試的方便,Oracle數(shù)據(jù)庫中的兩個(gè)具有DBA權(quán)限的用戶Sys和System的缺省密碼是manager。為了您數(shù)據(jù)庫系統(tǒng)的安全,我們強(qiáng)烈建議您該掉這兩個(gè)用戶的密碼,具體操作如下:
在SQL*DBA下鍵入:
alter user sys indentified by password;
alter user system indentified by password;
其中password為您為用戶設(shè)置的密碼。
二、Oracle服務(wù)器實(shí)用例程的安全性:
以下是保護(hù)Oracle服務(wù)器不被非法用戶使用的幾條建議:
(1) 確保$ORACLE_HOME/bin目錄下的所有程序的擁有權(quán)歸Oracle軟件擁有者所有;
(2) 給所有用戶實(shí)用便程(sqiplus,sqiforms,exp,imp等)711權(quán)限,使服務(wù)器上所有的用戶都可訪問Oracle服務(wù)器;
(3) 給所有的DBA實(shí)用例程(比如SQL*DBA)700權(quán)限。Oracle服務(wù)器和Unix組當(dāng)訪問本地的服務(wù)時(shí),您可以通過在操作系統(tǒng)下把Oracle服務(wù)器的角色映射到Unix的組的方式來使用Unix管理服務(wù)器的安全性,這種方法適應(yīng)于本地訪問。
在Unix中指定Oracle服務(wù)器角色的格式如下:
ora_sid_role[_dla]
其中 sid 是您Oracle數(shù)據(jù)庫的oracle_sid;
role 是Oracle服務(wù)器中角色的名字;
d (可選)表示這個(gè)角色是缺省值;a (可選)表示這個(gè)角色帶有WITH ADMIN選項(xiàng),您只可以把這個(gè)角色授予其他角色,不能是其他用戶。
以下是在/etc/group文件中設(shè)置的例子:
ora_test_osoper_d:NONE:1:jim,narry,scott
ora_test_osdba_a:NONE:3:pat
ora_test_role1:NONE:4:bob,jane,tom,mary,jim
bin: NONE:5:root,oracle,dba
root:NONE:7:root
詞組“ora_test_osoper_d”表示組的名字;詞組“NONE”表示這個(gè)組的密碼;數(shù)字1表示這個(gè)組的ID;接下來的是這個(gè)組的成員。前兩行是Oracle服務(wù)器角色的例子,使用test作為sid,osoper和osdba作為Oracle服務(wù)器角色的名字。osoper是分配給用戶的缺省角色,osdba帶有WITH ADMIN選項(xiàng)。為了使這些數(shù)據(jù)庫角色起作用,您必須shutdown您的數(shù)據(jù)庫系統(tǒng),設(shè)置Oracle數(shù)據(jù)庫參數(shù)文件initORACLE_SID.ora中os_roles參數(shù)為True,然后重新啟動(dòng)您的數(shù)據(jù)庫。如果您想讓這些角色有connect internal權(quán)限,運(yùn)行orapwd為這些角色設(shè)置密碼。當(dāng)您嘗試connect internal時(shí),您鍵入的密碼表示了角色所對(duì)應(yīng)的權(quán)限。
SQL*DBA命令的安全性:
如果您沒有SQL*PLUS應(yīng)用程序,您也可以使用SQL*DBA作SQL查權(quán)限相關(guān)的命令只能分配給Oracle軟件擁有者和DBA組的用戶,因?yàn)檫@些命令被授予了特殊的系統(tǒng)權(quán)限。
(1) startup
(2) shutdown
(3) connect internal
數(shù)據(jù)庫文件的安全性:
Oracle軟件的擁有者應(yīng)該這些數(shù)據(jù)庫文件($ORACLE_HOME/dbs/*.dbf)設(shè)置這些文件的使用權(quán)限為0600:文件的擁有者可讀可寫,同組的和其他組的用戶沒有寫的權(quán)限。
Oracle軟件的擁有者應(yīng)該擁有包含數(shù)據(jù)庫文件的目錄,為了增加安全性,建議收回同組和其他組用戶對(duì)這些文件的可讀權(quán)限。
當(dāng)處理網(wǎng)絡(luò)安全性時(shí),以下是額外要考慮的幾個(gè)問題。
(1) 在網(wǎng)絡(luò)上使用密碼在網(wǎng)上的遠(yuǎn)端用戶可以通過加密或不加密方式鍵入密碼,當(dāng)您用不加密方式鍵入密碼時(shí),您的密碼很有可能被非法用戶截獲,導(dǎo)致破壞了系統(tǒng)的安全性。
(2) 網(wǎng)絡(luò)上的DBA權(quán)限控制您可以通過下列兩種方式對(duì)網(wǎng)絡(luò)上的DBA權(quán)限進(jìn)行控制:
A 設(shè)置成拒絕遠(yuǎn)程DBA訪問;
B 通過orapwd給DBA設(shè)置特殊的密碼。[nextpage]
三、建立安全性策略:
系統(tǒng)安全性策略
(1)管理數(shù)據(jù)庫用戶:數(shù)據(jù)庫用戶是訪問Oracle數(shù)據(jù)庫信息的途徑,因此,應(yīng)該很好地維護(hù)管理數(shù)據(jù)庫用戶的安全性。按照數(shù)據(jù)庫系統(tǒng)的大小和管理數(shù)據(jù)庫用戶所需的工作量,數(shù)據(jù)庫安全性管理者可能只是擁有create,alter,或drop數(shù)據(jù)庫用戶的一個(gè)特殊用戶,或者是擁有這些權(quán)限的一組用戶,應(yīng)注意的是,只有那些值得信任的個(gè)人才應(yīng)該有管理數(shù)據(jù)庫用戶的權(quán)限。
(2) 用戶身份確認(rèn):數(shù)據(jù)庫用戶可以通過操作系統(tǒng),網(wǎng)絡(luò)服務(wù),或數(shù)據(jù)庫進(jìn)行身份確認(rèn),通過主機(jī)操作系統(tǒng)進(jìn)行用戶身份認(rèn)證的優(yōu)點(diǎn)有:
A 用戶能更快,更方便地聯(lián)入數(shù)據(jù)庫;
B 通過操作系統(tǒng)對(duì)用戶身份確認(rèn)進(jìn)行集中控制:如果操作系統(tǒng)與數(shù)據(jù)庫用戶信息一致,Oracle無須存儲(chǔ)和管理用戶名以及密碼;
C 用戶進(jìn)入數(shù)據(jù)庫和操作系統(tǒng)審計(jì)信息一致。
(3) 操作系統(tǒng)安全性
A 數(shù)據(jù)庫管理員必須有create和delete文件的操作系統(tǒng)權(quán)限;
B 一般數(shù)據(jù)庫用戶不應(yīng)該有create或delete與數(shù)據(jù)庫相關(guān)文件的操作系統(tǒng)權(quán)限;
C 如果操作系統(tǒng)能為數(shù)據(jù)庫用戶分配角色,那么安全性管理者必須有修改操作系統(tǒng)帳戶安全性區(qū)域的操作系統(tǒng)權(quán)限。
數(shù)據(jù)的安全性策略:
數(shù)據(jù)的生考慮應(yīng)基于數(shù)據(jù)的重要性。如果數(shù)據(jù)不是很重要,那么數(shù)據(jù)的安全性策略可以稍稍放松一些。然而,如果數(shù)據(jù)很重要,那么應(yīng)該有一謹(jǐn)慎的安全性策略,用它來維護(hù)對(duì)數(shù)據(jù)對(duì)象訪問的有效控制。
用戶安全性策略:
(1) 一般用戶的安全性:
A 密碼的安全性:如果用戶是通過數(shù)據(jù)庫進(jìn)行用戶身份的確認(rèn),那么建議使用密碼加密的方式與數(shù)據(jù)庫進(jìn)行連接。這種方式的設(shè)置方法如下:
在客戶端的oracle.ini文件中設(shè)置ora_encrypt_login數(shù)為true;
在服務(wù)器端的initORACLE_SID.ora文件中設(shè)置dbling_encypt_login參數(shù)為true。
B 權(quán)限管理:對(duì)于那些用戶很多,應(yīng)用程序和數(shù)據(jù)對(duì)象很豐富的數(shù)據(jù)庫,應(yīng)充分利用“角色”這個(gè)機(jī)制所帶的方便性對(duì)權(quán)限進(jìn)行有效管理。對(duì)于復(fù)雜的系統(tǒng)環(huán)境,“角色”能大大地簡化權(quán)限的理。
(2) 終端用戶的安全性:
您必須針對(duì)終端用戶制定安全性策略。例如,對(duì)于一個(gè)有很多用戶的大規(guī)模數(shù)據(jù)庫,安全性管理者可以決定用戶組分類為這些用戶組創(chuàng)建用戶角色,把所需的權(quán)限和應(yīng)用程序角色授予每一個(gè)用戶角色,以及為用戶分配相應(yīng)的用戶角色。當(dāng)處理特殊的應(yīng)用要求時(shí),安全性管理者也必須明確地把一些特定的權(quán)限要求授予給用戶。您可以使用“角色”對(duì)終端用戶進(jìn)行權(quán)限管理。
數(shù)據(jù)庫管理者安全性策略:
(1) 保護(hù)作為sys和system用戶的連接:
當(dāng)數(shù)據(jù)庫創(chuàng)建好以后,立即更改有管理權(quán)限的sys和system用戶的密碼,防止非法用戶訪問數(shù)據(jù)庫。當(dāng)作為sys和system用戶連入數(shù)據(jù)庫后,用戶有強(qiáng)大的權(quán)限用各種方式對(duì)數(shù)據(jù)庫進(jìn)行改動(dòng)。
(2) 保護(hù)管理者與數(shù)據(jù)庫的連接:
應(yīng)該只有數(shù)據(jù)庫管理者能用管理權(quán)限連入數(shù)據(jù)庫,當(dāng)以sysdba或startup,shutdown,和recover或數(shù)據(jù)庫對(duì)象(例如create,drop,和delete等)進(jìn)行沒有任何限制的操作。
(3) 使用角色對(duì)管理者權(quán)限進(jìn)行管理
應(yīng)用程序開發(fā)者的安全性策略:
(1) 應(yīng)用程序開發(fā)者和他們的權(quán)限數(shù)據(jù)庫應(yīng)用程序開發(fā)者是唯一一類需要特殊權(quán)限組完成自己工作的數(shù)據(jù)庫用戶。開發(fā)者需要諸如create table,create,procedure等系統(tǒng)權(quán)限,然而,為了限制開發(fā)者對(duì)數(shù)據(jù)庫的操作,只應(yīng)該把一些特定的系統(tǒng)權(quán)限授予開發(fā)者。
(2) 應(yīng)用程序開發(fā)者的環(huán)境:
A 程序開發(fā)者不應(yīng)與終端用戶競(jìng)爭數(shù)據(jù)庫資源;
B 用程序開發(fā)者不能損害數(shù)據(jù)庫其他應(yīng)用產(chǎn)品。
(3) free和controlled應(yīng)用程序開發(fā)應(yīng)用程序開發(fā)者有一下兩種權(quán)限:
A free development
應(yīng)用程序開發(fā)者允許創(chuàng)建新的模式對(duì)象,包括table,index,procedure,package等,它允許應(yīng)用程序開發(fā)者開發(fā)獨(dú)立于其他對(duì)象的應(yīng)用程序。
B controlled development
應(yīng)用程序開發(fā)者不允許創(chuàng)建新的模式對(duì)象。所有需要table,indes procedure等都由數(shù)據(jù)庫管理者創(chuàng)建,它保證了數(shù)據(jù)庫管理者能完全控制數(shù)據(jù)空間的使用以及訪問數(shù)據(jù)庫信息的途徑。但有時(shí)應(yīng)用程序開發(fā)者也需這兩種權(quán)限的混和。
(4) 應(yīng)用程序開發(fā)者的角色和權(quán)限數(shù)據(jù)庫安全性管理者能創(chuàng)建角色來管理典型的應(yīng)用程序開發(fā)者的權(quán)限要求。
A create系統(tǒng)權(quán)限常常授予給應(yīng)用程序開發(fā)者,以至于他們能創(chuàng)建他的數(shù)據(jù)對(duì)象。
B 數(shù)據(jù)對(duì)象角色幾乎不會(huì)授予給應(yīng)用程序開發(fā)者使用的角色。
(5) 加強(qiáng)應(yīng)用程序開發(fā)者的空間限制作為數(shù)據(jù)庫安全性管理者,您應(yīng)該特別地為每個(gè)應(yīng)用程序開發(fā)者設(shè)置以下的一些限制:
A 開發(fā)者可以創(chuàng)建table或index的表空間;
B 在每一個(gè)表空間中,開發(fā)者所擁有的空間份額。應(yīng)用程序管理者的安全在有許多數(shù)據(jù)庫應(yīng)用程序的數(shù)據(jù)庫系統(tǒng)中,您可能需要一應(yīng)用程序管理者,應(yīng)用程序管理者應(yīng)負(fù)責(zé)起以下的任務(wù):
a)為每一個(gè)應(yīng)用程序創(chuàng)建角色以及管理每一個(gè)應(yīng)用程序的角色;
b)創(chuàng)建和管理數(shù)據(jù)庫應(yīng)用程序使用的數(shù)據(jù)對(duì)象;
c)需要的話,維護(hù)和更新應(yīng)用程序代碼和Oracle的存儲(chǔ)過程和程序包。
我相信有了以上的這些建議,作為一個(gè)Oracle的管理者絕對(duì)可以做好他本職的工作了。可是,我們?cè)僭趺磁Γ际冀K得面對(duì)這樣一個(gè)現(xiàn)實(shí),那就是Oracle畢竟是其他人開發(fā)的,而我們卻在使用。所以,Oracle到底有多少漏洞--我想這個(gè)不是你和我所能解決的。不過既然作為一篇討論Oracle數(shù)據(jù)安全的文章,我認(rèn)為有必要把漏洞這一塊也寫進(jìn)去,畢竟這也是“安全”必不可少的一部分。呵呵!
所以……
Oracle漏洞舉例:
1.Oracle9iAS Web Cache遠(yuǎn)程拒絕服務(wù)攻擊漏洞
2.Oracle 8.1.6的oidldapd中的漏洞
3.Oracle 9iAS OracleJSP 泄漏JSP文件信息漏洞
4.Linux ORACLE 8.1.5漏洞
總而言之一句話--“Oracle數(shù)據(jù)安全是一個(gè)博大而又精深的話題;如果你沒有耐心,就永遠(yuǎn)不會(huì)得到它的精髓之所在。”希望大家能深入的去學(xué)習(xí)這篇文章,學(xué)好了也是百一而無一害。