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