一、何謂數(shù)據(jù)庫(kù)審計(jì)?
數(shù)據(jù)庫(kù)審計(jì),就是對(duì)數(shù)據(jù)庫(kù)的活動(dòng)做跟蹤記錄,主要包括數(shù)據(jù)庫(kù)連接,SQL語(yǔ)句執(zhí)行,數(shù)據(jù)庫(kù)對(duì)象訪問(wèn)這些方面的跟蹤記錄。
二、審記記錄的存儲(chǔ)方式
分為兩種:一種是存儲(chǔ)在操作系統(tǒng)文件中,一種是存儲(chǔ)在system表空間中的SYS.AUD$表中。
三、對(duì)數(shù)據(jù)庫(kù)性能影響的考慮
審計(jì)必然需要占用CPU,因此,需要綜合平衡審計(jì)需求與性能之間的平衡性問(wèn)題,以確定出最好的審許策略。
四、審記結(jié)果中包含哪些信息
前面講到審許結(jié)果的存儲(chǔ)分?jǐn)?shù)據(jù)庫(kù)存儲(chǔ)和文件存儲(chǔ)兩種方式。對(duì)于數(shù)據(jù)庫(kù)存儲(chǔ)的情況,SYS.AUD$表中包含以下信息:
1)·操作系統(tǒng)用戶名
2)·數(shù)據(jù)庫(kù)用戶名
3)·連接會(huì)話標(biāo)識(shí)
4)·終端標(biāo)識(shí)
5)·被訪問(wèn)的schema對(duì)象名
6)·嘗試的操作
7)·操作的完整代碼
8)·日期和時(shí)間戳
若審計(jì)記錄存儲(chǔ)在外部操作文件中,則該文件可能包含以下信息:
1)·操作系統(tǒng)產(chǎn)生的審計(jì)記錄
2)·數(shù)據(jù)庫(kù)的審計(jì)記錄
3)·被審計(jì)到的數(shù)據(jù)庫(kù)操作
4)·超級(jí)管理員(SYS)的審計(jì)記錄
其中,被寫(xiě)到文件中的審計(jì)記錄是以編碼的方式存儲(chǔ)的,如果要理解這些編碼所對(duì)應(yīng)的信息,可以查詢以下數(shù)據(jù)字典表:
編碼信息數(shù)據(jù)字典表
-------------------------------
數(shù)據(jù)庫(kù)操作代碼表示嘗試的操作。它的相關(guān)描述可以從數(shù)據(jù)字典表AUDIT_ACTIONS表中查詢到
操作所使用的權(quán)限可以在字典表SYSTEM_PRIVILEGE_MAP中查詢到對(duì)應(yīng)的說(shuō)明
完整的操作代碼操作成功時(shí)將返回0,失敗時(shí)返回相關(guān)oracle錯(cuò)誤信息,錯(cuò)誤信息碼所對(duì)應(yīng)的說(shuō)明可以從oracle官方文檔中獲得
--------------------------------
五、缺省的審計(jì)
不論當(dāng)前是否已經(jīng)開(kāi)啟的審計(jì)功能,數(shù)據(jù)庫(kù)都會(huì)把一些數(shù)據(jù)庫(kù)相關(guān)的操作寫(xiě)入外部審計(jì)文件中(注意:不是寫(xiě)入SYS.AUD$表),這些被缺省審計(jì)的操作是:
1)·以超級(jí)管理員權(quán)限對(duì)數(shù)據(jù)庫(kù)的連接(connectASSYSDBA或connectASSYSOPER)
2)·數(shù)據(jù)庫(kù)啟動(dòng)
3)·數(shù)據(jù)庫(kù)停止
六、對(duì)超級(jí)管理員用戶的操作行為的審計(jì)
超級(jí)管理員用戶指的是以ASSYSDBA或ASSYSOPER方式連接數(shù)據(jù)庫(kù)的用戶。初始化參數(shù)AUDIT_SYS_OPERATIONS用來(lái)指定是超級(jí)管理員的審計(jì)選項(xiàng),如果將AUDIT_SYS_OPERATIONS設(shè)置為TRUE,那么所有超級(jí)管理員的操作都將被審計(jì),而不管當(dāng)前是否有開(kāi)啟審計(jì)功能,而且所有的審計(jì)信息都被寫(xiě)入外部審計(jì)文件中(注意:不是寫(xiě)入SYS.AUD$表)。
七、執(zhí)行審計(jì)
1.設(shè)定審計(jì)記錄的存放位置
初始化參數(shù)AUDIT_TRAIL指定了審計(jì)記錄的存放位置,該參數(shù)有三個(gè)取值:
1)·DB審計(jì)記錄存放在數(shù)據(jù)庫(kù)的SYS.AUD$表中
2)·OS審計(jì)記錄存放在外部的操作系統(tǒng)文件中
3)·NONE關(guān)閉審計(jì)(缺省值)
初始化參數(shù)AUDIT_FILE_DEST指定了當(dāng)審?fù)獠繉徲浳募繕?biāo)存儲(chǔ)路徑,其缺省值是$ORACLE_HOME/rdbms/audit
2.審計(jì)選項(xiàng)
這個(gè)審計(jì)選項(xiàng)指的是執(zhí)行審計(jì)的AUDIT語(yǔ)句的可選項(xiàng)。AUDIT語(yǔ)句的語(yǔ)法請(qǐng)參考o(jì)racle官方SQL參考。
3.以實(shí)例說(shuō)明審計(jì)
a.審計(jì)某用戶的會(huì)話的創(chuàng)建與結(jié)束
AUDIT SESSION BY scott,fey;
b.審計(jì)所有用戶的會(huì)話的創(chuàng)建與結(jié)束
AUDIT SESSION;
c.審計(jì)刪除表的操作
AUDIT DELETE ANY TABLE;
d.審計(jì)刪除表的操作(限制:只審計(jì)刪除失敗的情況)
AUDIT DELETE ANY TABLE WHENEVER NOT SUCCESSFUL;
e.審計(jì)刪除表的操作(限制:只審計(jì)刪除成功的情況)
AUDIT DELETE ANY TABLE WHENEVER SUCCESSFUL;
f.審計(jì)刪除表的操作(限制:同一個(gè)會(huì)話中相同的操作語(yǔ)句只審計(jì)一次)
AUDIT DELETE ANY TABLE BY SESSION;
(注:對(duì)于這種情況,如果審計(jì)記錄被設(shè)定為存儲(chǔ)在外部文件中時(shí),這個(gè)效果是體現(xiàn)不出來(lái)的,因?yàn)閛racle無(wú)法判斷是否已經(jīng)審計(jì)過(guò)相同的操作語(yǔ)句。)
g.審計(jì)刪除表的操作(限制:每支刪除語(yǔ)句都審計(jì),不論同一會(huì)話中是否有多條相同的操作語(yǔ)句)
AUDIT DELETE ANY TABLE BY ACCESS;
h.審計(jì)對(duì)fey.employee表的delete操作
AUDIT DELETE ON fey.employee;
i.審計(jì)對(duì)fey.employee表的delete、updet、insert操作
AUDIT DELETE,UPDATE,INSERT ON fey.employee;
八、停止審計(jì)
停止審計(jì)使用NOAUDIT語(yǔ)句,該語(yǔ)句的語(yǔ)法請(qǐng)參考o(jì)racle官方SQL參考。下面以實(shí)例說(shuō)明NOAUDIT的使用:
a.停止所有對(duì)會(huì)話的創(chuàng)建與結(jié)束的審計(jì)
NOAUDIT SESSION;
b.停止對(duì)用戶fey,scott的會(huì)話的創(chuàng)建與結(jié)束的審計(jì)
NOAUDIT SESSION BY fey,scott;
c.停止審計(jì)刪除表的操作
NOAUDIT DELETE ANY TABLE;
d.停止審計(jì)刪除表的操作(限制:停止審計(jì)刪除失敗的情況)
NOAUDIT DELETE ANY TABLE WHENEVER NOT SUCCESSFUL;
e.停止審計(jì)刪除表的操作(限制:停止審計(jì)刪除成功的情況)
NOAUDIT DELETE ANY TABLE WHENEVER SUCCESSFUL;
f.停止審計(jì)對(duì)fey.employee表的delete操作
NOAUDIT DELETE ON fey.employee;
g.停止審計(jì)對(duì)fey.employee表的delete、updet、insert操作
NOAUDIT DELETE,UPDATE,INSERT ON fey.employee;
九、對(duì)審計(jì)記錄表SYS.AUD$的管理
當(dāng)SYS.AUD$表的審計(jì)記錄越來(lái)越多的時(shí)候,以至達(dá)到存儲(chǔ)極限時(shí),會(huì)因?yàn)閷徲?jì)記錄無(wú)法寫(xiě)入而產(chǎn)生錯(cuò)誤。或許我還也需要對(duì)該表的數(shù)據(jù)進(jìn)行一些轉(zhuǎn)儲(chǔ)或者碎片的整理,或是刪除一些我們認(rèn)為不再需要的審計(jì)記錄。這些都是要考慮的事情。下面給出一個(gè)對(duì)該表進(jìn)行存儲(chǔ)碎片的整理的一個(gè)方法:
a.將該表的數(shù)據(jù)select into到另一個(gè)表中,或利用export導(dǎo)出到外部文件
b.truncate這張表(要以超級(jí)管理員登錄才行)
c.再將原先轉(zhuǎn)儲(chǔ)的數(shù)據(jù)再加載進(jìn)來(lái)。
也許我們需要對(duì)針對(duì)SYS.AUD$表的操作進(jìn)行審計(jì),如:AUDIT INSERT,UPDATE,DELETE ON sys.aud$BY ACCESS;
十、Fine-Grained審計(jì)
如前面所述,審計(jì)的記錄中并沒(méi)有含操作所作用的數(shù)據(jù),比如說(shuō),需要審計(jì)針對(duì)一個(gè)表的select,而且需要在審計(jì)記錄中包含select語(yǔ)句所返回的數(shù)據(jù)。這時(shí),就需要用到Fine-Grained審計(jì)。Fine-Grained審計(jì)是基于oracle的事件,其原理是在insert,update或delete相關(guān)的事件中截取相關(guān)的數(shù)據(jù)。屬于orale程序開(kāi)發(fā)的范疇。具體可以參考相關(guān)oracle文檔。
十一、審計(jì)相關(guān)的數(shù)據(jù)字典視圖
STMT_AUDIT_OPTION_MAP
AUDIT_ACTIONS
ALL_DEF_AUDIT_OPTS
DBA_STMT_AUDIT_OPTS
DBA_PRIV_AUDIT_OPTS
DBA_OBJ_AUDIT_OPTS
USER_OBJ_AUDIT_OPTS
DBA_AUDIT_TRAIL
USER_AUDIT_TRAIL
DBA_AUDIT_OBJECT
USER_AUDIT_OBJECT
DBA_AUDIT_SESSION
USER_AUDIT_SESSION
DBA_AUDIT_STATEMENT
USER_AUDIT_STATEMENT
DBA_AUDIT_EXISTS
DBA_AUDIT_POLICIES
DBA_FGA_AUDIT_TRAIL