魏萬瓊?王亦然


摘要:Oracle數(shù)據(jù)庫在部署和使用之前決定是否部署安全措施很重要,用戶在實施與維護的過程中都需要提前考慮好是否采取安全措施和實施安全策略。基于安全部署的數(shù)據(jù)庫,可以為后期使用和等保測評避免很多麻煩。除了在網(wǎng)絡(luò)硬件設(shè)備和防火墻設(shè)備上采用安全措施以外,還可以在系統(tǒng)的防火墻上實施數(shù)據(jù)庫的訪問IP及端口的限制策略。其次在數(shù)據(jù)庫安裝完成后也需要考慮數(shù)據(jù)庫的補丁升級和是否對數(shù)據(jù)庫的用戶和資源做限制策略。
關(guān)鍵詞:Oracle;防火墻策略;數(shù)據(jù)庫安全
一、前言
所有存儲在數(shù)據(jù)庫中的數(shù)據(jù)都是有價值的,為了防止數(shù)據(jù)被篡改和竊取,可以采用很多措施限制數(shù)據(jù)庫的訪問來保護數(shù)據(jù)的安全。比如在物理防火墻上做網(wǎng)絡(luò)訪問控制,或者使用堡壘機進行身份驗證及授權(quán),以此來確保訪問的用戶及IP地址是否在可訪問的范圍內(nèi)。本篇主要講述了從系統(tǒng)層面上做防火墻策略,以及數(shù)據(jù)庫用戶上做一些配置來限制數(shù)據(jù)的訪問,通過審計來保存訪問記錄,以此來做一些數(shù)據(jù)庫安全上的防護措施。
二、網(wǎng)絡(luò)安全配置
在安裝Oracle數(shù)據(jù)庫的時候,為避免出現(xiàn)網(wǎng)絡(luò)連通性的問題而導(dǎo)致數(shù)據(jù)庫安裝失敗,會選擇關(guān)閉系統(tǒng)防火墻。避免因為網(wǎng)絡(luò)無法聯(lián)通的問題而無法安裝RAC集群[1]。從安全的角度考慮,關(guān)閉系統(tǒng)防火墻是不可取的。安裝Oracle數(shù)據(jù)庫集群之前,就需要進行防火墻的配置,除了開放主機IP地址、私網(wǎng)IP地址、虛擬IP地址和SCAN IP地址的訪問權(quán)限,還需要節(jié)點之間的169.254.*網(wǎng)段的IP訪問權(quán)限。如圖1所示,10.10.20.0代表主機IP地址、虛擬IP地址和SCAN IP地址的網(wǎng)段。192.168.10.1和192.168.10.2是私網(wǎng)IP地址。169.254.*IP網(wǎng)段就是RAC集群中ora.cluster_interconnect.haip所需要的網(wǎng)段地址,啟動集群服務(wù)的也需要節(jié)點之間這個網(wǎng)段的IP地址互通,以此來實現(xiàn)集群的高可用和負載均衡。
如果需要具體到端口,RAC除了開放監(jiān)聽端口(默認(rèn)1521),還需要開放8000-65500之間的端口。數(shù)據(jù)庫安裝完成后,可以通過配置sqlnet.ora文件,設(shè)置TCP.VALIDNODE_CHECKING、TCP.EXCLUDED_NODES和TCP.INVITED_NODES參數(shù)來客戶端限制訪問數(shù)據(jù)庫。
三、用戶資源限制
每一個Oracle數(shù)據(jù)庫用戶都有一個配置文件,存在于數(shù)據(jù)庫中的一組可命名資源限制集,用于限制用戶對數(shù)據(jù)庫的連接訪問和資源使用。在創(chuàng)建用戶的時候,Oracle數(shù)據(jù)庫會自動為用戶分配一個名為DEFAULT的配置文件[2-3]。也可以通過SQL查看DEFAULT命名的配置文件在密碼和資源上的配置策略,如圖2所示。
根據(jù)圖2的信息,對RESOURCE_NAME列的各項參數(shù)進行簡單講述,在數(shù)據(jù)庫實際使用中可以根據(jù)具體需求,進行參數(shù)修改來實現(xiàn)數(shù)據(jù)庫用戶限制。
(一)COMPOSITE_LIMIT
針對指定會話的總資源消耗成本進行資源限制,需要綜合CPU_PER_SESSION、LOGICAL_READS_PER_SESSION 和 PRIVATE_SGA 來取值。
(二)SESSIONS_PER_USER
用于限制該用戶訪問數(shù)據(jù)庫的并發(fā)會話數(shù),當(dāng)數(shù)據(jù)庫用戶的SESSION值超過這個參數(shù)值就會報錯ORA-02391。
(三)CPU_PER_SESSION
指定會話的CPU時間限制,以1%秒為單位,推薦它的LIMIT值為unlimited。
(四)CPU_PER_CALL
指定調(diào)用的CPU時間限制,以1%秒為單位。
(五)LOGICAL_READS_PER_SESSION
指定會話中允許從存儲器和磁盤讀取的數(shù)據(jù)塊數(shù)。
(六)LOGICAL_READS_PER_CALL
指定允許調(diào)用處理SQL語句讀取的數(shù)據(jù)塊數(shù)。
(七)IDLE_TIME
指定會話期間允許的連續(xù)不活動時間限制,以分鐘為單位,超過這個時間限制,會話就會斷開,主要針對不活動的會話進程,長時間運行的會話不受此限制。
(八)CONNECT_TIME
指定所有狀態(tài)的會話連接時間限制,以分鐘為單位。
(九)PRIVATE_SGA
指定會話可以在系統(tǒng)全局區(qū)域的共享池中分配的私有空間大小,以字節(jié)表示。
1到9的參數(shù)都屬于資源限制,需要設(shè)置數(shù)據(jù)庫參數(shù)RESOURCE_LIMIT = TRUE 并重新啟動數(shù)據(jù)庫,參數(shù)設(shè)置才能生效。
(十)FAILED_LOGIN_ATTEMPTS
設(shè)置用戶在鎖定賬戶之前嘗試登錄的失敗次數(shù),超過失敗次數(shù),用戶將被鎖定。
(十一)PASSWORD_LIFE_TIME
設(shè)置用戶使用當(dāng)前密碼的天數(shù),超過這個天數(shù),密碼則過期。用戶在下次登錄時,系統(tǒng)會提示用戶修改密碼。
(十二)PASSWORD_REUSE_TIME
指定一個天數(shù),在這個天數(shù)范圍內(nèi),設(shè)置密碼不能重復(fù),通過設(shè)置此參數(shù)來控制密碼的重復(fù)使用天數(shù)。
(十三)PASSWORD_REUSE_MAX
設(shè)置密碼在多少次之內(nèi)都不能重復(fù),通過設(shè)置此參數(shù)來控制密碼的重復(fù)使用次數(shù),可以和PASSWORD_REUSE_TIME結(jié)合使用。
(十四)PASSWORD_LOCK_TIME
設(shè)置在指定的連續(xù)登錄嘗試失敗次數(shù)后鎖定賬戶的天數(shù)。鎖定時間過去后,該賬戶將被解鎖。這個配置參數(shù)有助于防止用戶密碼被暴力攻擊。
(十五)PASSWORD_GRACE_TIME
設(shè)置用戶在密碼過期之前必須更改密碼的天數(shù),數(shù)據(jù)庫會在這個天數(shù)內(nèi)提醒用戶密碼將過期。
(十六)PASSWORD_VERIFY_FUNCTION
設(shè)置一個PL/SQL密碼驗證腳本為參數(shù)傳遞到配置文件中,主要用于檢查數(shù)據(jù)庫用戶的密碼復(fù)雜度。Oracle提供了一個默認(rèn)密碼驗證腳本utlpwdmg.sql,存放在$ORACLE_HOME/rdbms/admin/目錄下。
配置verify_function_11G函數(shù)的方法,需要執(zhí)行者擁有dba權(quán)限的用戶登錄數(shù)據(jù)庫,執(zhí)行以下步驟:
第一步:創(chuàng)建系統(tǒng)默認(rèn)的口令復(fù)雜度函數(shù)
SQL>@?rdbms/admin/utlpwdmg.sql
第二步:創(chuàng)建一個自定義profile,設(shè)置密碼復(fù)雜度。
如創(chuàng)建MY_PROFILE引用verify_function_11G函數(shù):
SQL> create profile MY_PROFILE limit PASSWORD_VERIFY_FUNCTION verify_function_11G;
第三步:將MY_PROFILE應(yīng)用于用戶USTEST
SQL> alter user USTEST profile MY_PROFILE;
十到十六的參數(shù)屬于密碼配置實時生效,不需要重啟數(shù)據(jù)庫。
四、審計
(一)標(biāo)準(zhǔn)審計
審計是對數(shù)據(jù)庫內(nèi)部控制強有力的有效管理辦法,監(jiān)視和記錄用戶在數(shù)據(jù)庫的操作,嚴(yán)格控制用戶和應(yīng)用程序?qū)?shù)據(jù)庫的訪問。
Oracle會將審計跟蹤的內(nèi)容寫入數(shù)據(jù)字典表或操作系統(tǒng)日志文件中。
通過設(shè)置參數(shù)audit_trail=DB或者OS來打開數(shù)據(jù)庫審計,每次修改參數(shù)之后需要重新啟動數(shù)據(jù)庫才能生效。
參數(shù)值是指定審計記錄指定審計記錄寫入的目的地和寫入的數(shù)據(jù)類型,NONE指的是不啟動審計功能。
通過使用AUDIT和NOAUDIT語句來配置和刪除配置進行審計相關(guān)操作。
以下從語句審計、權(quán)限審計、對象審計和網(wǎng)絡(luò)審計四個方面講述。
1.語句審計
Oracle數(shù)據(jù)庫可以選擇審計語句執(zhí)行成功的記錄,也可以選擇審計沒有執(zhí)行成功的記錄,或者是執(zhí)行成功和執(zhí)行不成功的語句都記錄。監(jiān)控未執(zhí)行的SQL可能會暴露正在窺探或有惡意行為的用戶。
數(shù)據(jù)庫分別記錄SQL語句的每次執(zhí)行、權(quán)限的使用以及審計對象的訪問,根據(jù)記錄的返回信息可以了解執(zhí)行次數(shù)。審計記錄中有單獨的LOGON和LOGOFF條目。舉例,審計執(zhí)行沒有成功的語句:
SQL> AUDIT INSERT TABLE, DELETE TABLE BY ACCESS WHENEVER NOT SUCCESSFUL;
2.權(quán)限審計
權(quán)限審計選項與其對應(yīng)的系統(tǒng)權(quán)限相同。舉例,審核DELETE ANY TABLE權(quán)限:
SQL> AUDIT DELETE ANY TABLE BY ACCESS;
3.對象審計
對象審計可以審計引用表、視圖、序列、獨立存儲過程或函數(shù)以及包的語句,在集群模式下,通過審計操作來間接審計對象的訪問。舉例,配置HR用戶下的EMPLOYEES表相關(guān)操作:
SQL> AUDIT INSERT, DELETE ON HR.EMPLOYEES BY ACCESS WHENEVER SUCCESSFUL;
4.審計網(wǎng)絡(luò)活動
可以使用AUDIT審計網(wǎng)絡(luò)協(xié)議和網(wǎng)絡(luò)層中的錯誤語句,這些錯誤以SQL*Net驅(qū)動程序拋出;網(wǎng)絡(luò)審計在審計記錄的字段中列出了客戶端的身份驗證類型和可用的 SQL*Net 地址。例如,配置網(wǎng)絡(luò)審計:
SQL> AUDIT NETWORK BY ACCESS;
(二)細粒度審計
細粒度審計能夠創(chuàng)建策略對特定類型的SQL語句進行審計,根據(jù)內(nèi)容監(jiān)控數(shù)據(jù)訪問,提供提供DML操作的細粒度審計操作的細粒度審計。可以通過查詢視圖DBA_FGA_AUDIT_TRAIL查找審計策略生成的記錄。
使用DBMS_FGA.ADD_POLICY創(chuàng)建細粒度審計策略,如果需要修改策略,則將其刪除重建。當(dāng)暫時不需要審計策略的時候,可以使用DBMS_FGA.DISABLE_POLICY禁用審計策略,禁用后也可以使用DBMS_FGA.ENABLE_POLICY重新啟用審計策略,如果不再需要審計策略,可以使用DBMS_FGA.DROP_POLICY刪除審計策略。
五、結(jié)語
從網(wǎng)絡(luò)安全要求出發(fā),做好網(wǎng)絡(luò)安全是應(yīng)盡職責(zé)。在數(shù)據(jù)庫創(chuàng)建之前就應(yīng)該做好安全上的規(guī)劃,無論是在數(shù)據(jù)庫的系統(tǒng)以及配置文件做安全訪問控制,還是配置數(shù)據(jù)庫用戶的訪問資源限制,包括配置用戶審計等一切安全措施,都是為了保護生產(chǎn)業(yè)務(wù)的數(shù)據(jù)庫安全,防止數(shù)據(jù)被竊取或篡改的一種手段。
參考文獻
[1]周文瓊,王樂球,鄭述招.Oracle網(wǎng)絡(luò)的配置與管理[J].計算機與數(shù)字工程,2014,42(12):2350-2353+2368.
[2]韋壹剛.Oracle數(shù)據(jù)庫日常維護與優(yōu)化建議[J].信息與電腦(理論版),2018(08):142-143.
[3]陳飛.Oracle數(shù)據(jù)庫日常維護與優(yōu)化[J].電子技術(shù)與軟件工程,2017(21):174.
責(zé)任編輯:王穎振、周航