數(shù)據(jù)庫(kù)工程師:Oracle數(shù)據(jù)庫(kù)安全性設(shè)計(jì)建議
一、什么是安全的系統(tǒng)
安全性建設(shè)是一個(gè)長(zhǎng)期并且卓絕的工作。作為一個(gè)符合標(biāo)準(zhǔn)的企業(yè)級(jí)系統(tǒng),我們認(rèn)為稅務(wù)系統(tǒng)應(yīng)該具備以下的安全性特點(diǎn):
高可用性
對(duì)敏感數(shù)據(jù)的訪問(wèn)控制能力。
監(jiān)測(cè)用戶行為的審計(jì)能力。
用戶帳號(hào)管理的有效性和擴(kuò)充性
二、從哪些方面作安全性檢查
一個(gè)企業(yè)級(jí)系統(tǒng)的安全性建設(shè)并不僅僅局限于軟件技術(shù)方面的設(shè)置和控制,甚至我們可以說(shuō),技術(shù)僅僅位于一個(gè)補(bǔ)充和提高現(xiàn)有安全性的地位上。通常,應(yīng)該按照重要性依次進(jìn)行如下的安全性檢查。
物理層面的控制
控制物理接觸是系統(tǒng)安全性建設(shè)的第一步,也是最會(huì)有成效,最應(yīng)該優(yōu)先執(zhí)行的一步。
權(quán)威安全研究顯示,70% 的信息系統(tǒng)數(shù)據(jù)損失和攻擊都是由“內(nèi)部人”(即具備某種系統(tǒng)及其數(shù)據(jù)訪問(wèn)權(quán)限的用戶)造成和發(fā)起的。
比如,授權(quán)人員才可以進(jìn)入機(jī)房,管理人員的密碼不要記錄在顯眼的地方,離開(kāi)個(gè)人終端鎖定屏幕,等等,這些建議看上去似乎比較瑣碎。但是如果缺少了這些意識(shí),即使我們運(yùn)用了再好的安全性技術(shù),再?gòu)?fù)雜的數(shù)據(jù)分離技術(shù),當(dāng)一個(gè)人可以接近需要保護(hù)的服務(wù)器,當(dāng)一個(gè)人可以通過(guò)竊取的密碼接近需要保護(hù)的數(shù)據(jù),那么一切的安全性建設(shè)都將是一個(gè)擺設(shè)。
千里之堤,毀于蟻穴。一個(gè)牢固的堤壩不會(huì)因?yàn)橥饨绾樗臎_擊而倒塌,卻會(huì)崩壞于隱藏在自身內(nèi)部的蛀蟲(chóng)。
所以,最佳的方法是不要讓螞蟻靠近堤壩。
安全性流程建設(shè)
實(shí)施安全性建設(shè)之后,必須要有一個(gè)詳細(xì)周密而且行之有效的流程控制(Process Control)。其中行之有效是我們應(yīng)該注意的。
有時(shí)候會(huì)聽(tīng)到抱怨,在增強(qiáng)了安全性建設(shè)的系統(tǒng)中,維護(hù)人員由于分工過(guò)細(xì),導(dǎo)致整個(gè)系統(tǒng)的應(yīng)變能力下降,維護(hù)成本提高,管理效率降低。以前一個(gè)人可以在10分鐘內(nèi)作好的修改,現(xiàn)在卻要途經(jīng)3,4個(gè)人之手,耗時(shí)1-2天還不一定能夠做完。
過(guò)猶不及,建立一個(gè)符合企業(yè)自身需求的安全性流程是我們應(yīng)該優(yōu)先考慮的。
普遍性的安全性措施
不僅僅是Oracle數(shù)據(jù)庫(kù)系統(tǒng),作為一個(gè)具有領(lǐng)先性的IT系統(tǒng),都應(yīng)該包括以下的安全性措施。
1.只安裝需要的軟件
每個(gè)軟件都有缺陷,對(duì)于Oracle數(shù)據(jù)庫(kù)軟件來(lái)說(shuō),自定義安裝,只選取需要的組件,少作少錯(cuò),這一點(diǎn)在安全性方面顯得尤為重要,一個(gè)具有潛在安全性漏洞的組件,如果它沒(méi)有被安裝。那它就不會(huì)影響整個(gè)系統(tǒng)。
2.鎖定或者失效默認(rèn)用戶
對(duì)于Oracle數(shù)據(jù)庫(kù)系統(tǒng)來(lái)說(shuō),安裝的時(shí)候會(huì)有一系列的默認(rèn)用戶生成,應(yīng)該在數(shù)據(jù)庫(kù)安裝完畢之后,經(jīng)過(guò)功能篩選,鎖定或者失效這些用戶。
3.修改可用用戶的默認(rèn)密碼
不能鎖定或者失效的用戶,必須修改默認(rèn)密碼。比如具有SYSDBA權(quán)限的SYS用戶和具有DBA權(quán)限的SYSTEM用戶,都應(yīng)該修改默認(rèn)密碼。至于密碼長(zhǎng)度和復(fù)雜性的有效控制在后面將會(huì)談到。
4.限制操作系統(tǒng)存取權(quán)限
Oracle數(shù)據(jù)庫(kù)系統(tǒng)是依存在操作系統(tǒng)之上的,如果操作系統(tǒng)被人侵入,那么通過(guò)修改配置文件等一系列方法,Oracle數(shù)據(jù)庫(kù)的安全性也將蕩然無(wú)存。
5.定期更新廠家推出的安全性補(bǔ)丁
隨著時(shí)間的推移,廠家通常會(huì)推出一系列的安全性補(bǔ)丁來(lái)彌補(bǔ)現(xiàn)有系統(tǒng)的安全隱患。
對(duì)于Oracle數(shù)據(jù)庫(kù)而言,應(yīng)該定期查看以下網(wǎng)址來(lái)獲取Oracle公司最新的安全性警告和解決方案。
Oracle數(shù)據(jù)庫(kù)本身的安全性建設(shè)
從總體上而言,Oracle數(shù)據(jù)庫(kù)是業(yè)界安全性方面最完備的數(shù)據(jù)庫(kù)產(chǎn)品。在數(shù)據(jù)庫(kù)安全性的國(guó)際標(biāo)準(zhǔn)中,Oracle通過(guò)了14項(xiàng)標(biāo)準(zhǔn)的測(cè)試,是所有數(shù)據(jù)庫(kù)產(chǎn)品中通過(guò)安全性標(biāo)準(zhǔn)最多、最全面的產(chǎn)品。Oracle在C2級(jí)的操作系統(tǒng)上(如商用UNIX,VMS操作系統(tǒng)),不僅滿足NCSC C2級(jí)安全標(biāo)準(zhǔn),而且已經(jīng)正式通過(guò)了NCSC C2標(biāo)準(zhǔn)的測(cè)試。在B1級(jí)的操作系統(tǒng)上不僅滿足NCSC B1級(jí)安全標(biāo)準(zhǔn),而且已經(jīng)通過(guò)了NCSC B1級(jí)標(biāo)準(zhǔn)的測(cè)試。
Oracle提供的主要安全性措施如下:
身份認(rèn)證功能(Authentication):識(shí)別訪問(wèn)個(gè)體的身份
數(shù)據(jù)訪問(wèn)的機(jī)密性(Confidentialty):保證敏感數(shù)據(jù)訪問(wèn)的機(jī)密性。
數(shù)據(jù)完整性(Integrity):保證數(shù)據(jù)不被篡改。
授權(quán)能力(Authorization):保證被授權(quán)用戶對(duì)數(shù)據(jù)的查詢和修改能力。
訪問(wèn)控制(Access Control):確定對(duì)指定數(shù)據(jù)的訪問(wèn)能力。
審計(jì)能力(Auditing):提供監(jiān)測(cè)用戶行為的能力。
私有性(Privacy):提供對(duì)敏感數(shù)據(jù)訪問(wèn)的私密性。
高可用性(Availability):保證數(shù)據(jù)和系統(tǒng)提供不間斷服務(wù)的能力。
代理管理能力(Delegated Administration):提供對(duì)用戶帳號(hào)的集中管理功能。
下面將就應(yīng)用系統(tǒng)本身對(duì)于Oracle提供的安全性措施作更深入的探討。
三、Oracle的安全性領(lǐng)域
Profile控制
Oracle利用profile機(jī)制來(lái)管理會(huì)話資源占用,同時(shí)也管理用戶密碼的安全策略。
通過(guò)profile我們可以實(shí)現(xiàn):
某個(gè)特定用戶最多只能占用系統(tǒng)百分之幾的CPU時(shí)間?
某個(gè)特定用戶連接到數(shù)據(jù)庫(kù)之后能存活多長(zhǎng)時(shí)間?
某個(gè)特定用戶連接到數(shù)據(jù)庫(kù)之后多長(zhǎng)時(shí)間處于非活躍狀態(tài)就將被系統(tǒng)中斷連接?
用戶登錄密碼輸入錯(cuò)誤多少次之后就將自動(dòng)鎖定用戶?
用戶密碼的長(zhǎng)度和包含的字符必須符合什么樣的規(guī)則?
用戶密碼在多少天后將自動(dòng)失效并要求設(shè)定新密碼?
用戶權(quán)限控制(Privilage)
Oracle通過(guò)角色(Role),權(quán)限(Privilage)等的一系列授予(Grant)和回收(Revoke)操作可以有效的進(jìn)行用戶的權(quán)限控制。
通過(guò)權(quán)限控制我們可以實(shí)現(xiàn):
某個(gè)特定用戶只能讀取而不能修改另一個(gè)用戶的表數(shù)據(jù)。
某個(gè)特定用戶只能運(yùn)行Oracle數(shù)據(jù)庫(kù)系統(tǒng)的幾個(gè)存儲(chǔ)過(guò)程或者函數(shù)。
某個(gè)特定用戶自己能夠擁有修改某些數(shù)據(jù)的權(quán)力,但是卻無(wú)法給其它不擁有這個(gè)權(quán)限的用戶授予修改該數(shù)據(jù)的權(quán)力。
某個(gè)特定用戶可以讀取數(shù)據(jù)但是無(wú)法創(chuàng)建新的表空間。
虛擬專用數(shù)據(jù)庫(kù)(VPD)
虛擬專用數(shù)據(jù)庫(kù) (VPD) 也稱為細(xì)粒度訪問(wèn)控制,它提供強(qiáng)大的行級(jí)安全功能。它是在 Oracle8i 中推出的,已經(jīng)受到廣泛的歡迎。
VPD 的工作方法是,通過(guò)透明地更改對(duì)數(shù)據(jù)的請(qǐng)求,基于一系列定義的標(biāo)準(zhǔn)向用戶提供表的局部視圖。在運(yùn)行時(shí),所有查詢都附加了謂詞,以便篩選出準(zhǔn)許用戶看到的行。
也就是通過(guò)VPD的設(shè)置,我們可以做到行級(jí)安全性控制,特定的用戶即使對(duì)一張表有讀取權(quán)限,那么也只能看到符合自身權(quán)限的記錄。
注意,在Oracle10g版本中,VPD得到增強(qiáng),已經(jīng)可以實(shí)現(xiàn)字段級(jí)的安全性控制了。
實(shí)例及搭建步驟參看:利用VPD細(xì)粒度訪問(wèn)策略實(shí)現(xiàn)行級(jí)安全性Step By Step。
Orace Label Security
基于對(duì)由客戶提交的行級(jí)安全性的嚴(yán)格要求,Oracle Label Security(Oracle 數(shù)據(jù)庫(kù)企業(yè)版的選件之一)利用多級(jí)安全性概念解決了世界上政府和商業(yè)用戶在實(shí)際中遇到的數(shù)據(jù)安全和隱私問(wèn)題。
OLS 通過(guò)利用數(shù)據(jù)敏感度標(biāo)簽(例如“敏感”和“公司機(jī)密”)與用戶標(biāo)簽授權(quán),提供了完善的行級(jí)安全性控制。
OLS 使用政策概念來(lái)存儲(chǔ)標(biāo)簽定義和授權(quán)。該政策可直接在數(shù)據(jù)庫(kù)中進(jìn)行管理,或在 Oracle 身份管理中進(jìn)行集中管理。
Oracle Database Valut
通常數(shù)據(jù)庫(kù)管理員如果具有了DBA權(quán)限,那么就很難防止這樣的管理員查看應(yīng)用程序數(shù)據(jù)。而Oracle Database Valut則解決了必須保護(hù)涉及合作伙伴、員工和顧客的敏感業(yè)務(wù)信息或隱私數(shù)據(jù)的客戶最為擔(dān)心的問(wèn)題。
Oracle Database Vault 可防止高權(quán)限的應(yīng)用程序 DBA 訪問(wèn)其他的應(yīng)用程序、執(zhí)行其權(quán)限之外的任務(wù)。Oracle Database Vault 可在不影響應(yīng)用程序功能的前提下快速而高效地保護(hù)現(xiàn)有程序。
Oracle Database Vault 可通過(guò)下列方法解決一些最為常見(jiàn)的安全問(wèn)題和內(nèi)部威脅:
1. 限制 DBA 和其他授權(quán)用戶訪問(wèn)應(yīng)用程序數(shù)據(jù)。
2. 防止DBA 操縱數(shù)據(jù)庫(kù)和訪問(wèn)其他應(yīng)用程序。Oracle Database Vault 提供了強(qiáng)大的職責(zé)劃分控制功能,可防止擅自更改數(shù)據(jù)庫(kù)。比如說(shuō)如果一個(gè)用戶具有 CREATE USER 權(quán)限,但不具備正確的用戶管理權(quán)限,則 Oracle Database Vault 將阻止該 DBA 創(chuàng)建新用戶。
3. 更好的控制何人、何時(shí)、何地可以訪問(wèn)應(yīng)用程序。如日期時(shí)間、數(shù)據(jù)庫(kù)客戶端在網(wǎng)絡(luò)上的位置之類的因素。
Oracle Database Valut是新的Oracle Database 10g企業(yè)版的選件。目前已經(jīng)有Linux X86以及Solaris SPARC 64bit的版本可以下載使用了。
用戶訪問(wèn)審計(jì)
審計(jì)是Oracle安全性的另一個(gè)重要領(lǐng)域,我們還必須小心地計(jì)劃審計(jì)方案。有幾種方式可在Oracle中進(jìn)行審計(jì):
1.SQL審計(jì)命令(標(biāo)準(zhǔn)審計(jì))
通過(guò)AUDIT語(yǔ)句我們可以對(duì)成功或者不成功的特定對(duì)象的讀取,更新操作進(jìn)行審計(jì)。
標(biāo)準(zhǔn)審計(jì)只會(huì)記錄較少的跟蹤信息,比如發(fā)出該語(yǔ)句的用戶、時(shí)間、終端標(biāo)識(shí)號(hào)等等。
該審計(jì)對(duì)于系統(tǒng)性能的影響更多地取決于對(duì)象的繁忙程度。
2.用對(duì)象觸發(fā)器進(jìn)行審計(jì)(也就是DML審計(jì))
此類審計(jì)通常由客戶自行開(kāi)發(fā)放置于特定數(shù)據(jù)庫(kù)對(duì)象上的觸發(fā)器,由于是自行開(kāi)發(fā),所以相對(duì)于標(biāo)準(zhǔn)審計(jì)則能夠更自由地記錄更多感興趣的跟蹤信息。比如更新操作將某個(gè)字段從什么原始值更新到了什么新值。
該審計(jì)對(duì)于系統(tǒng)性能的影響更多地取決于對(duì)象的繁忙程度和觸發(fā)器的編寫水平。
3.用系統(tǒng)級(jí)觸發(fā)器進(jìn)行審計(jì)(記錄用戶登錄和退出)
當(dāng)用戶登錄數(shù)據(jù)庫(kù)或者離開(kāi)數(shù)據(jù)庫(kù)時(shí),都可以通過(guò)自定義的觸發(fā)器來(lái)記錄用戶名稱,操作時(shí)間,終端標(biāo)識(shí)號(hào)等信息。
由于觸發(fā)器觸發(fā)幾率小,所以該審計(jì)對(duì)于系統(tǒng)性能影響并不大。
4.用LogMiner進(jìn)行審計(jì)(也就是DML和DDL)
Oracle數(shù)據(jù)庫(kù)將所有的更新操作都記錄在重作日志中,而Oracle提供了LogMiner工具用于挖掘重作日志中的所有操作,相比起上述的各種審計(jì)方法來(lái)說(shuō),該種審計(jì)可能是信息最為完善,對(duì)于應(yīng)用系統(tǒng)性能影響最小的方法。
此處稍微延展開(kāi)來(lái)說(shuō)一下,LogMiner是雙刃劍,既然可以用來(lái)審計(jì),也就能夠被惡意使用作為數(shù)據(jù)竊取的工具。所以在數(shù)據(jù)本身的加密方面,Oracle同樣提供了多種解決方案,比如DBMS_OBFUSCATION_TOOLKIT,DBMS_CRYPTO和最新的透明數(shù)據(jù)加密,甚至在數(shù)據(jù)備份方面Oracle也推出了Secure Backup來(lái)應(yīng)對(duì)磁帶數(shù)據(jù)的加密,但是要注意到數(shù)據(jù)加密不應(yīng)用作訪問(wèn)控制的替代項(xiàng),存儲(chǔ)加密的數(shù)據(jù)并不會(huì)在存儲(chǔ)介質(zhì)本身提供額外的保護(hù)層,只是有助于在發(fā)生介質(zhì)遭竊時(shí)保護(hù)諸如信用卡號(hào)之類的敏感數(shù)據(jù)。本文不再作更多的介紹。
5.細(xì)精度審計(jì)(FGA)
細(xì)粒度審計(jì) (FGA),是在 Oracle 9i 中引入的,能夠記錄 SCN 號(hào)和行級(jí)的更改以重建舊的數(shù)據(jù),但是它們只能用于 select 語(yǔ)句,而不能用于 DML,如 update、insert 和 delete 語(yǔ)句。因此,對(duì)于 Oracle 數(shù)據(jù)庫(kù) 10g 之前的版本,使用觸發(fā)器雖然對(duì)于以行級(jí)跟蹤用戶初始的更改是沒(méi)有吸引力的瘍,但它也是唯一可靠的方法。
而Oracle10g種FGA功能的增強(qiáng)使其不但能夠支持select操作,同時(shí)也支持DML操作。在 Oracle 10g 中,審計(jì)已經(jīng)從一個(gè)單純的“操作記錄者”成長(zhǎng)為一個(gè)“事實(shí)記錄機(jī)制”,它能以一個(gè)非常詳細(xì)的級(jí)別來(lái)捕獲用戶的行為,這可以消除您對(duì)手動(dòng)的、基于觸發(fā)器的審計(jì)的需要。它還結(jié)合了標(biāo)準(zhǔn)審計(jì)和 FGA 的跟蹤,這使其更易于跟蹤數(shù)據(jù)庫(kù)訪問(wèn),而不用考慮它是如何生成的。
通過(guò)細(xì)粒度審計(jì)我們可以記錄:
在早上九點(diǎn)到下午六點(diǎn)之間或在星期六和星期日對(duì)某個(gè)表進(jìn)行了訪問(wèn)。
使用了公司網(wǎng)絡(luò)外部的某個(gè) IP 地址。
選定或更新了特定列。
使用了該列的特定值。
【編輯推薦】