Oracle數(shù)據(jù)庫安全措施
數(shù)據(jù)庫安全一直以來都是人們關(guān)注的熱門話題,眾所周知,對于Oracle數(shù)據(jù)庫來說,Oracle數(shù)據(jù)庫中的數(shù)據(jù)信息都是非常重要的,不容泄露,下文中就為大家總結(jié)了一些Oracle數(shù)據(jù)庫的安全措施,希望對大家能夠有所幫助。
一、數(shù)據(jù)庫安全原則
1.只安裝oracle必須的組件;
2.鎖定并終止默認(rèn)用戶帳號;
3.改變默認(rèn)用戶密碼;
4.激活數(shù)據(jù)字典保護(hù)(oracle9i默認(rèn)具有此功能);
5.根據(jù)實(shí)際情況給予最少的權(quán)限;
6.強(qiáng)制進(jìn)行有效的訪問控制(oracle9i默認(rèn)具有此功能);
7.限制操作系統(tǒng)訪問;
8.限制網(wǎng)絡(luò)訪問;
9.安裝所有的安全補(bǔ)丁;
二、具體安全加強(qiáng)措施
1.對默認(rèn)用戶進(jìn)行鎖定
在oracle安裝過程中默認(rèn)安裝會(huì)有很多的默認(rèn)用戶,造成安全潛在問題,可以將其鎖定,限制對數(shù)據(jù)庫進(jìn)行連接。
Oracle范例用戶:HR,OE,PM,SH,QS_ADM,QS,QS_WS,QS_ES,QS_OS,QS_CBADM,QS_CB,QS_CS
只是用于oracle的范例,沒有實(shí)際用處;
DBSNMP:負(fù)責(zé)運(yùn)行Oracle系統(tǒng)的智能代理(Intelligent Agent),實(shí)際中很少使用,幾乎不使用;
OUTLN:用于存儲Outlines,不使用時(shí)可鎖定,使用時(shí)再打開;
MDSYS, ORDSYS, CTXSYS, ORDPLUGINS:用于支持oracle的Intermedia,默認(rèn)鎖定;
WMSYS:用于存儲Oracle Workspace Manager的元數(shù)據(jù)信息,默認(rèn)鎖定;
ANONYMOUS:用于允許HTTP 訪問Oracle XML DB;
XDB:用于存儲Oracle XML DB數(shù)據(jù)和元數(shù)據(jù);
此外還有一些系統(tǒng)自帶的用戶,不再列舉,建議對除sys,system,rman,perfstat以外的系統(tǒng)自帶用戶進(jìn)行鎖定,減少安全隱患。
Sql:select username,account_status from dba_users;
alter user username account lock; 2.安裝最新的安全補(bǔ)丁
安全公告和補(bǔ)丁位置如下:
http://otn.oracle.com/deploy/security/alerts.htm
3.密碼管理機(jī)制
在Oracle,我們可以通過修改用戶概要文件來設(shè)置密碼的安全策略,可以自定義密碼的復(fù)雜度。在概要文件中有以下參數(shù)是和密碼安全有關(guān)系的:
FAILED_LOGIN_ATTEMPTS:最大錯(cuò)誤登錄次數(shù)
PASSWORD_GRACE_TIME:口令失效后鎖定時(shí)間
PASSWORD_LIFE_TIME:口令有效時(shí)間
PASSWORD_LOCK_TIME:登錄超過有效次數(shù)鎖定時(shí)間
PASSWORD_REUSE_MAX:口令歷史記錄保留次數(shù)
PASSWORD_REUSE_TIME:口令歷史記錄保留時(shí)間
PASSWORD_VERIFY_FUNCTION:口令復(fù)雜度審計(jì)函數(shù)。
缺省這個(gè)安全策略是沒有啟用的。
啟用安全策略:
以sys用戶執(zhí)行:SQL> @?/rdbms/admin/utlpwdmg.sql
設(shè)置舉例:
CREATE PROFILE app_user2 LIMIT
FAILED_LOGIN_ATTEMPTS 5
PASSWORD_LIFE_TIME 60
PASSWORD_REUSE_TIME 60
PASSWORD_REUSE_MAX UNLIMITED
PASSWORD_VERIFY_FUNCTION verify_function
PASSWORD_LOCK_TIME 1/24
PASSWORD_GRACE_TIME 10;
4.資源管理機(jī)制
啟用資源管理:
SQL> alter system set resource_limit=true;
設(shè)置舉例:
CREATE PROFILE app_user LIMIT
SESSIONS_PER_USER UNLIMITED
CPU_PER_SESSION UNLIMITED
CPU_PER_CALL 3000
CONNECT_TIME 45
LOGICAL_READS_PER_SESSION DEFAULT
LOGICAL_READS_PER_CALL 1000
PRIVATE_SGA 15K
COMPOSITE_LIMIT 5000000;
指定profile可以使用create user 或者alter user,舉例如下:
CREATE USER test
IDENTIFIED BY aZ7bC2
DEFAULT TABLESPACE data_ts
QUOTA 100M ON test_ts
QUOTA 500K ON data_ts
TEMPORARY TABLESPACE temp_ts
PROFILE profile_name;
ALTER USER test
IDENTIFIED BY A12BDD
DEFAULT TABLESPACE data_ts
TEMPORARY TABLESPACE temp_ts
QUOTA 100M ON data_ts
QUOTA 0 ON test_ts
PROFILE profile_name;
5. 權(quán)限管理
根據(jù)實(shí)際情況,細(xì)分權(quán)限,建立角色,對于系統(tǒng)權(quán)限慎重給予。采用最小授權(quán)原則,給用戶盡量少的權(quán)限。
用戶組PUBLIC,顧名思義,表示數(shù)據(jù)庫中的每一位用戶,因此,對PUBLIC 用戶組授予權(quán)限其實(shí)也就是對數(shù)據(jù)庫中的每一位用戶都授予了相應(yīng)的權(quán)限。這是在授予或撤銷權(quán)限時(shí)非常有用的一條捷徑。但也可能帶來巨大的安全隱患,尤其是在試圖確保以最少權(quán)限的方式運(yùn)行數(shù)據(jù)庫時(shí),更是如此。
撤銷Public 組的一些不必要權(quán)限,嚴(yán)格限制以下程序包的權(quán)限:
UTL_FILE:該程序包允許oralce 用戶讀取服務(wù)器上的文件,如果設(shè)置錯(cuò)誤的話,可能可以得到任何文件。
UTL_HTTP:該程序包允許oracle 用戶通過HTTP 訪問外部資源包括惡意的web 代碼和文件。
UTL_TCP: 該程序包允許oracle 通過TCP 建立連接,從而從網(wǎng)絡(luò)上得到可執(zhí)行文件。
UTL_SMTP: 該程序包允許oracle 通過SMTP 方式進(jìn)行通信,從而轉(zhuǎn)發(fā)關(guān)鍵文件。
撤銷以上包的執(zhí)行權(quán)限:
Sql:
revoke EXECUTE on UTL_FILE from public;
revoke EXECUTE on UTL_TCP from public;
revoke EXECUTE on UTL_SMTP from public;
revoke EXECUTE on UTL_HTTP from public; 6.修改認(rèn)證方式
Oracle默認(rèn)使用操作系統(tǒng)認(rèn)證,只要能進(jìn)入系統(tǒng)可直接以sys進(jìn)入oracle,存在較大安全隱患,可修改為數(shù)據(jù)庫認(rèn)證方式。
在$ORACLE_HOME/network/admin中,打開sqlnet.ora,將SQLNET.AUTHENTICATION_SERVICES= (NTS)注釋掉,在前面加#即可。 7.限制IP連接
由于Oracle 的TNS 監(jiān)聽器有許多安全漏洞,其中的一些漏洞甚至能讓入侵者得到操作系統(tǒng)的超級用戶權(quán)限或者修改數(shù)據(jù)庫中的數(shù)據(jù),因此在打好補(bǔ)丁的同時(shí),對連接IP 的限制也能做到防患于未然。
在$ORACLE_HOME\network\admin 目錄下修改SQLNET.ORA文件,
增加如下內(nèi)容:
tcp.validnode_checking = YES
tcp.invited_nodes = (IP地址, hostname)
IP地址和hostname是允許連接的主機(jī)的名字和IP地址。 8.關(guān)掉Extproc 功能
由于extproc 存在安全問題允許用戶不進(jìn)行身份認(rèn)證就可以調(diào)用系統(tǒng)函數(shù),因此如果不需要該功能必須關(guān)閉。
修改TNSNAMES.ORA 和LISTENER.ORA 文件,刪除含有EXTPROC的條目,使兩個(gè)文件中只含有使用的有效連接信息。 9.啟動(dòng)審計(jì)功能
Oracle的審計(jì)機(jī)制是用來監(jiān)視用戶對ORACLE數(shù)據(jù)庫所做的各種操作。在缺省情況下,系統(tǒng)的審計(jì)功能是關(guān)閉的。可以在INIT.ORA參數(shù)文件中設(shè)置參數(shù)AUDIT_TRAIL來激活。它的值有:NONE 禁止審計(jì);DB 啟用審計(jì),寫入SYS.AUD$;OS 啟用審計(jì),寫入操作系統(tǒng)。
當(dāng)AUDIT_TRAIL=OS,可設(shè)置AUDIT_FILE_DEST指定審計(jì)文件的位置,默認(rèn)情況在$ORACLE_HOME/rdbms/audit下面。
AUDIT_SYS_OPERATIONS, AUDIT_TRAIL, AUDIT_FILE_DEST都是靜態(tài)參數(shù),需修改參數(shù)文件重啟后生效。
設(shè)置審計(jì)水平:
Statement:指定對影響數(shù)據(jù)庫對象的一個(gè)特定類型的特定SQL語句進(jìn)行審計(jì)。比如對表的audit table有以下語句:CREATE TABLE, TRUNCATE TABLE, COMMENT ON TABLE, and DELETE [FROM] TABLE等;
Privilege:對由指定系統(tǒng)權(quán)限授權(quán)的SQL語句進(jìn)行審計(jì),比如AUDIT CREATE ANY TRIGGER是對由CREATE ANY TRIGGER系統(tǒng)權(quán)限授權(quán)的語句進(jìn)行審計(jì);
Object:對特定對象上的特定操作進(jìn)行審計(jì),比如ALTER TABLE on the emp。
設(shè)置審計(jì)條件:
BY SESSION/BY ACCESS:BY SESSION使oracle在同一session中的同一類型的SQL語句只寫一條記錄;BY ACCESS使oracle對每次訪問寫一條記錄。
WHENEVER SUCCESSFUL/WHENEVER NOT SUCCESSFUL:WHENEVER SUCCESSFU只審計(jì)那些成功執(zhí)行的SQL語句;WHENEVER NOT SUCCESSFUL只審計(jì)那些失敗或結(jié)果錯(cuò)誤的SQL語句。
審計(jì)操作舉例:
審計(jì)連接:
AUDIT SESSION; AUDIT SESSION BY scott, lori;
審計(jì)指定權(quán)限:
AUDIT DELETE ANY TABLE BY ACCESS WHENEVER NOT SUCCESSFUL;
AUDIT DELETE ANY TABLE;
AUDIT SELECT TABLE, INSERT TABLE, DELETE TABLE, EXECUTE PROCEDURE BY ACCESS WHENEVER NOT SUCCESSFUL;
審計(jì)指定對象:
AUDIT DELETE ON scott.emp;
AUDIT SELECT, INSERT, DELETE ON jward.dept BY ACCESS WHENEVER SUCCESSFUL;
AUDIT SELECT ON DEFAULT WHENEVER NOT SUCCESSFUL;
關(guān)閉審計(jì)操作:
關(guān)閉上面例子中的相應(yīng)審計(jì):
NOAUDIT session;
NOAUDIT session BY scott, lori;
NOAUDIT DELETE ANY TABLE;
NOAUDIT SELECT TABLE, INSERT TABLE, DELETE TABLE,EXECUTE PROCEDURE;
關(guān)閉所有語句審計(jì):
NOAUDIT ALL;
關(guān)閉所有權(quán)限審計(jì):
NOAUDIT ALL PRIVILEGES;
關(guān)閉對象審計(jì):
NOAUDIT DELETE ON emp;
NOAUDIT SELECT, INSERT, DELETE ON jward.dept;
關(guān)閉某一對象上的所有審計(jì):
NOAUDIT ALL ON emp;
關(guān)閉所有的默認(rèn)對象審計(jì):
NOAUDIT ALL ON DEFAULT;
相關(guān)審計(jì)信息視圖:
ALL_DEF_AUDIT_OPTS
USER_OBJ_AUDIT_OPTS
DBA_OBJ_AUDIT_OPTS
DBA_STMT_AUDIT_OPTS
DBA_PRIV_AUDIT_OPTS
DBA_AUDIT_TRAIL
USER_AUDIT_TRAIL
DBA_AUDIT_SESSION
USER_AUDIT_SESSION
DBA_AUDIT_STATEMENT
USER_AUDIT_STATEMENT
DBA_AUDIT_OBJECT
USER_AUDIT_OBJECT
DBA_AUDIT_EXISTS
SM$AUDIT_CONFIG
KU$_AUDIT_VIEW
KU$_AUDIT_OBJ_BASE_VIEW
KU$_AUDIT_OBJ_VIEW
DBA_AUDIT_POLICIES
ALL_AUDIT_POLICIES
USER_AUDIT_POLICIES
DBA_FGA_AUDIT_TRAIL
DBA_REPAUDIT_ATTRIBUTE
ALL_REPAUDIT_ATTRIBUTE
USER_REPAUDIT_ATTRIBUTE
DBA_REPAUDIT_COLUMN
ALL_REPAUDIT_COLUMN
USER_REPAUDIT_COLUMN
查看審計(jì)信息舉例:
列出活動(dòng)的語句審計(jì)操作:
SELECT * FROM DBA_STMT_AUDIT_OPTS;
列出活動(dòng)的權(quán)限審計(jì)操作:
SELECT * FROM DBA_PRIV_AUDIT_OPTS;
列出對指定對象的活動(dòng)對象審計(jì)操作:
SELECT * FROM DBA_OBJ_AUDIT_OPTS WHERE OWNER = 'SCOTT' AND OBJECT_NAME LIKE 'EMP%';
列出默認(rèn)的對象審計(jì)操作:
SELECT * FROM ALL_DEF_AUDIT_OPTS;
列出審計(jì)記錄:
SELECT * FROM DBA_AUDIT_OBJECT;
列出對于AUDIT SESSION審計(jì)操作的審計(jì)記錄:
SELECT USERNAME, LOGOFF_TIME, LOGOFF_LREAD, LOGOFF_PREAD, LOGOFF_LWRITE, LOGOFF_DLOCK FROM DBA_AUDIT_SESSION;
關(guān)于Oracle數(shù)據(jù)庫的安全措施就為大家總結(jié)了這么多,相信上文中講到的安全措施一定能夠幫助大家實(shí)現(xiàn)Oracle數(shù)據(jù)庫的安全,希望大家都能夠上文中涉及到的內(nèi)容中有所收獲。





















