肖 寒,周華強(qiáng),劉云飛
(1.河南電力試驗(yàn)研究院,河南 鄭州 450052;2.中原工學(xué)院 計(jì)算機(jī)學(xué)院,河南 鄭州 451191;3.河南省知識(shí)產(chǎn)權(quán)事務(wù)中心,河南 鄭州 450008)
ORACLE數(shù)據(jù)庫是一個(gè)龐大的數(shù)據(jù)庫管理系統(tǒng)(DBMS),所涉及的系統(tǒng)知識(shí)較多,本文只做系統(tǒng)ORACLE本身的安全加固方面的研究,涉及操作系統(tǒng)安全和存儲(chǔ)備份的相關(guān)技術(shù)不在本文的研討范圍之內(nèi).
目前,企業(yè)內(nèi)部數(shù)據(jù)庫的安全威脅主要來自于2個(gè)方面,一方面是外部的攻擊,外部非法訪問者通過網(wǎng)絡(luò)掃描進(jìn)行試探,企圖訪問企業(yè)的內(nèi)部數(shù)據(jù)庫;另一方面是企業(yè)內(nèi)部用戶的不正當(dāng)操作,這也給數(shù)據(jù)庫的安全帶來了隱患.作為系統(tǒng)的核心數(shù)據(jù)庫,其安全加固的原則應(yīng)采用最小授權(quán)原則[1].
業(yè)務(wù)系統(tǒng)對(duì)數(shù)據(jù)庫的訪問是一個(gè)由外向內(nèi)的訪問過程,首先通過網(wǎng)絡(luò)與數(shù)據(jù)庫系統(tǒng)建立連接,然后使用用戶密碼登錄通過ORACLE系統(tǒng)認(rèn)證,最后根據(jù)業(yè)務(wù)權(quán)限對(duì)數(shù)據(jù)進(jìn)行訪問[2].本文的安全加固措施就是按照數(shù)據(jù)訪問的業(yè)務(wù)流程向由外向內(nèi)進(jìn)行加固.
對(duì)ORACLE外部網(wǎng)絡(luò)的訪問可以通過防火墻安全過濾策略加以限制,而內(nèi)部業(yè)務(wù)服務(wù)器和數(shù)據(jù)庫服務(wù)器通常在一個(gè)網(wǎng)絡(luò),沒有防火墻,要防止內(nèi)部不必要的數(shù)據(jù)庫訪問,可以通過ORACLE程序本身提供的相關(guān)安全措施配置IP訪問策略,在網(wǎng)絡(luò)層屏蔽未經(jīng)許可的IP服務(wù)請(qǐng)求[3].采用以下方法修改ORACLE的默認(rèn)訪問策略訪問,修改 ORACLE 數(shù)據(jù)庫服務(wù)器的 sqlnet.ora 文件,在文件中追加以下內(nèi)容:
TCP.EXCLUDED_NODES= (10.70.xx.xx, 10.70.xx.xx)
TCP.VALIDNODE_CHECKING = YES
TCP.INVITED_NODES= (10.70.xx.xx)
其中,TCP.EXCLUDED_NODES 表示拒絕的 IP 列表,TCP.INVITED_NODES 表示允許訪問的 IP 列表,通過以上設(shè)置達(dá)到預(yù)期目的.
防火墻作為系統(tǒng)的第一道防線,監(jiān)控可信任網(wǎng)絡(luò)和不可信任網(wǎng)絡(luò)之間的訪問通道,可在內(nèi)部與外部網(wǎng)絡(luò)之間形成一道防護(hù)屏障,攔截來自外部的非法訪問[4].ORACLE的Listener對(duì)外提供網(wǎng)絡(luò)服務(wù)和端口,通常情況下不開放ORACLE的Listener端口,屏蔽外部對(duì)數(shù)據(jù)庫的訪問.若必須開通外網(wǎng)業(yè)務(wù)訪問ORACLE服務(wù)端口,可以修改ORACLE的默認(rèn)監(jiān)聽服務(wù)端口,防止一些針對(duì)指定端口掃描的非法程序的訪問,使其即使掃描到該端口也不一定知道它就是ORACLE應(yīng)用,以下修改默認(rèn)服務(wù)端口為1553的實(shí)現(xiàn)方法:
LISTENER_NEW = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = hostname)(PORT = 1553)))
在默認(rèn)情況下,ORACLE的監(jiān)聽程序是沒有密碼保護(hù)的,沒有加密的程序很容易受到非法程序的攻擊,被非法訪問.為提高安全性,可以為ORACLE監(jiān)聽設(shè)置密碼,堵住該安全漏洞.
LSNRCTL> set save_config_on_stop on
LSNRCTL> change_password
Old password: ——由于先前沒有設(shè)置過Listener密碼,這里直接回車即可.
New password:——輸入Listener密碼
Reenter new password:——再次輸入Listener密碼
LSNRCTL> set password
數(shù)據(jù)庫的賬號(hào)需要規(guī)劃,通常情況下,在沒有賬號(hào)規(guī)劃的數(shù)據(jù)庫中,程序賬號(hào)、數(shù)據(jù)維護(hù)查詢賬號(hào)、數(shù)據(jù)庫監(jiān)控賬號(hào)等都混在一起,沒有專門分類和實(shí)名管理.而且,賬號(hào)的權(quán)限非常大,可多人使用,存在較大的安全隱患.為了加強(qiáng)對(duì)賬號(hào)及權(quán)限的管理,我們可以對(duì)數(shù)據(jù)庫賬號(hào)進(jìn)行分類.可將常用的數(shù)據(jù)庫賬號(hào)分為5類:程序賬號(hào)、數(shù)據(jù)維護(hù)賬號(hào)、數(shù)據(jù)查詢賬號(hào)、數(shù)據(jù)庫監(jiān)控賬號(hào)和數(shù)據(jù)庫系統(tǒng)賬號(hào),不同職責(zé)的人員使用不同類型的賬號(hào),擁有對(duì)應(yīng)的權(quán)限,實(shí)行實(shí)名制管理.根據(jù)這5類賬號(hào)的不同使用要求,制定不同的權(quán)限管理規(guī)則,并開啟相應(yīng)級(jí)別的操作審計(jì),在保證應(yīng)用程序正常穩(wěn)定運(yùn)行的情況下,最大化地保障系統(tǒng)的安全性.
ORACLE用戶對(duì)數(shù)據(jù)庫的訪問是通過用戶名和密碼來驗(yàn)證的,可通過設(shè)置ORACLE的密碼策略防止非法用戶的暴力破解.ORACLE提供了PROFILE功能,可以為用戶配置PROFILE,來設(shè)置ORACLE用戶的密碼策略.密碼策略包括:(1)用戶名和密碼不能相同;(2)密碼長度要大于4個(gè)字符;(3)密碼不能是常用的單詞詞匯;(4)密碼必須包含“至少一個(gè)字母、一個(gè)數(shù)字、一個(gè)標(biāo)點(diǎn)”;(5)新舊密碼要符合“差3規(guī)則”.
具體的實(shí)現(xiàn)方法為修改用戶的PROFILE的PASSWORD_VERIFY_FUNCTION 為VERIFY_FUNCTION,其中,VERIFY_FUNCTION 的主要實(shí)現(xiàn)邏輯如下:
FOR i IN 1..length(chararray) LOOP
FOR j IN 1..m LOOP
IF substr(password,j,1) = substr(chararray,i,1) THEN
ischar:=TRUE;
GOTO findpunct;
END IF;
END LOOP;
END LOOP;
IF ischar = FALSE THEN
raise_application_error(-20003, 'Password should contain at least one
digit, one character and one punctuation' );
END IF
對(duì)ORACLE的安全管理與后期安全事件的回溯,數(shù)據(jù)庫的審計(jì)必不可少.數(shù)據(jù)庫的安全審計(jì)主要包括:
(1)開啟數(shù)據(jù)庫的DDL審計(jì)功能,審計(jì)任何賬號(hào)的DDL操作;
(2)開啟SYS賬號(hào)的審計(jì)功能,審計(jì)SYS賬號(hào)的任何操作;
(3)對(duì)于一些權(quán)限較高的特殊維護(hù)賬號(hào),需要審計(jì)這些賬號(hào)的所有操作;
(4)重點(diǎn)業(yè)務(wù)表審計(jì),編寫觸發(fā)器對(duì)重點(diǎn)業(yè)務(wù)表的任何修改操作進(jìn)行審計(jì),記錄修改前后的詳細(xì)信息.
ORACLE支持審計(jì)結(jié)果存放在操作系統(tǒng)文件和數(shù)據(jù)庫表中,考慮到審計(jì)的性能和后期審計(jì)結(jié)果的查詢效率,建議ORACLE的審計(jì)結(jié)果存放在數(shù)據(jù)庫表的方式為SYS.AUD S| 表.該表只能存放在system表空間,防止空間被無限占滿,需要每天通過DB-JOB對(duì)SYS.AUD S| 進(jìn)行歸檔、轉(zhuǎn)移來釋放空間[5].
設(shè)置ORACLE的參數(shù)audit_trail為db, alter system set audit_trail=db將審計(jì)信息存入ORACLE數(shù)據(jù)庫中,其中備份和轉(zhuǎn)移審計(jì)數(shù)據(jù)如下:
insert/*+append*/ into t_aud S| backup select * from aud S| ;
execute immediate 'truncate table aud S| drop storage';
delete from t_aud S| backup where timestamp# < dt_beforedate;
ORACLE提供了新的觸發(fā)器——登錄觸發(fā)器,可以在用戶登錄的時(shí)候觸發(fā)已經(jīng)設(shè)計(jì)好的觸發(fā)條件,達(dá)到指定IP上的指定用戶和指定應(yīng)用程序才能訪問數(shù)據(jù)庫,以防止數(shù)據(jù)被非法篡改[6].通常,可以設(shè)計(jì)一張配置表sys.t_sysconfig,如表1所示.
表1 防止非法篡改數(shù)據(jù)表配置Tab.1 The data table allocation to prevent unauthorized tampering
sys.t_sysconfig表配置項(xiàng)的具體含義是:
(1) db_restricted_users
a.指明哪些用戶需要受到限制(ALL表示所有用戶);
b.如果登錄用戶名不包括在這個(gè)列表中,就允許連接;
c.如果登錄用戶名被包含,則拒絕.
(2) db_permit_program
a.表示哪些程序可以連接(ALL表示所有程序);
b.如果客戶端的程序不在這個(gè)列表中,拒絕其登錄;
c.具體的程序名及含義如表2所示.
表2 sys.t_sysconfig表配置項(xiàng)具體含義Tab.2 The specific meaning of sys.t_sysconfig table allocation
例如:PLSQLDEV:SQLPLUS::JDBC 表示允許 plsqldev、sqlplus、匿名程序以及jdbc連接.
數(shù)據(jù)庫系統(tǒng)的安全性在很大程度上依賴于數(shù)據(jù)庫管理系統(tǒng)本身,作為DBMS中主要的ORACLE數(shù)據(jù)庫,在實(shí)際業(yè)務(wù)過程中要構(gòu)建數(shù)據(jù)庫管理系統(tǒng)下的安全防范規(guī)范,以保證數(shù)據(jù)庫的獨(dú)立性和完整性,進(jìn)而保障數(shù)據(jù)庫的安全.
參考文獻(xiàn):
[1] 薩師煊,王珊.數(shù)據(jù)庫系統(tǒng)概論[M].北京:高等教育出版社,2000.
[2] 劉啟源,劉怡.數(shù)據(jù)庫與信息系統(tǒng)的安全[M].北京:科學(xué)出版社,2000.
[3] 李海波. Oracle數(shù)據(jù)庫的安全及備份恢復(fù)[J].電腦知識(shí)與技術(shù), 2004(11):18.
[4] 韓云波.Oracle性能調(diào)整技術(shù)研究[J].電腦知識(shí)與技術(shù),2010,7(6):1554-1556.
[5] 趙宇蘭,李慶波.解析Oracle內(nèi)存結(jié)構(gòu)及內(nèi)存性能診斷與調(diào)優(yōu)[J].山西電子技術(shù),2009(2):95-96.
[6] 巢子杰.Oracle數(shù)據(jù)庫優(yōu)化探究[J].軟件導(dǎo)刊,2010(2):142-144.