1、什麼是審計
審計(Audit)用於監視使用者所執行的資料庫操作,審計記錄可存在資料字典表(稱為審計記錄:儲存在system資料表空間中的 SYS.AUD$表中,可通過視圖dba_audit_trail查看)或作業系統審計記錄中(預設位置為$ORACLE_BASE/admin/$ORACLE_SID/adump/)。。預設情況下審計是沒有開啟的。
當資料庫的審計是使能的,在語句執行階段產生審計記錄。審計記錄包含有審計的操作、使用者執行的操作、操作的日期和時間等資訊。
不管你是否開啟資料庫的審計功能,以下這些作業系統會強制記錄:用管理員權限串連Instance;啟動資料庫;關閉資料庫。
(1)Oracle審計功能
審計是對選定的使用者動作的監控和記錄,通常用於:
審查可疑的活動。例如:資料被非授權使用者所刪除,此時安全性系統管理員可決定對該 資料庫的所有串連進行審計,以及對資料庫的所有表的成功地或不成功地刪除進行審計。
監視和收集關於指定資料庫活動的資料。例如:DBA可收集哪些被修改、執行了多少次邏輯的I/O等統計資料。
ORACLE所允許的審計選擇限於下列方面:
審計語句的成功執行、不成功執行,或者其兩者。
對每一使用者會話審計語句執行一次或者對語句每次執行審計一次。
對全部使用者或指定使用者的活動的審計。
(2)審計相關的表安裝
SQLPLUS> connect / AS SYSDBA
SQLPLUS> select * from sys.aud$; --沒有記錄返回
SQLPLUS> select * from dba_audit_trail; - 沒有記錄返回
如果做上述查詢的時候發現表不存在,說明審計相關的表還沒有安裝,需要安裝。
SQLPLUS> connect / as sysdba
SQLPLUS> @$ORACLE_HOME/rdbms/admin/cataudit.sql
審計表安裝在SYSTEM資料表空間。所以要確保SYSTEM資料表空間又足夠的空間存放審計資訊。
安裝後要重啟資料庫
將審計相關的表移動到其他資料表空間
由於AUD$表等審計相關的表存放在SYSTEM資料表空間,因此為了不影響系統的效能,保護SYSTEM資料表空間,最好把AUD$移動到其他的資料表空間上。可以使用下面的語句來進行移動:
sql>connect / as sysdba;
sql>alter table aud$ move tablespace <new tablespace>;
sql>alter index I_aud1 rebuild online tablespace <new tablespace>;
SQL> alter table audit$ move tablespace <new tablespace>;
SQL> alter index i_audit rebuild online tablespace <new tablespace>;
SQL> alter table audit_actions move tablespace <new tablespace>;
SQL> alter index i_audit_actions rebuild online tablespace <new tablespace>;
2、和審計相關的兩個主要參數
(1)Audit_sys_operations:
預設為false,當設定為true時,所有sys使用者(包括以sysdba, sysoper身份登入的使用者)的操作都會被記錄,audit trail不會寫在aud$表中,這個很好理解,如果資料庫還未啟動aud$不可用,那麼像conn /as sysdba這樣的串連資訊,只能記錄在其它地方。如果是windows平台,audti trail會記錄在windows的事件管理中,如果是linux/unix平台則會記錄在audit_file_dest參數指定的檔案中。
(2)Audit_trail:
None:是預設值,不做審計;
DB:將audit trail 記錄在資料庫的審計相關表中,如aud$,審計的結果只有串連資訊;
DB,Extended:這樣審計結果裡面除了串連資訊還包含了當時執行的具體語句;
OS:將audit trail 記錄在作業系統檔案中,檔案名稱由audit_file_dest參數指定;
XML:10g裡新增的。
註:這兩個參數是static參數,需要重新啟動資料庫才會生效。
3、審計層級
當開啟審計功能後,可在三個層級對資料庫進行審計:Statement(語句)、Privilege(許可權)、object(對象)。
(1)Statement:
語句審計,對某種類型的SQL語句審計,不指定結構或對象。比如audit table 會審計資料庫中所有的create table,drop table,truncate table語句,alter session by cmy會審計cmy使用者所有的資料庫連接。
(2)Privilege:
許可權審計,當使用者使用了該許可權則被審計,如執行grant select any table to a,當執行了audit select any table語句後,當使用者a 訪問了使用者b的表時(如select * from b.t)會用到select any table許可權,故會被審計。注意使用者是自己表的所有者,所以使用者訪問自己的表不會被審計。 特權審計。
(3)Object:
對象審計,對一特殊模式對象上的指定語句的審計。 如審計on關鍵字指定對象的相關操作,如aduit alter,delete,drop,insert on cmy.t by scott; 這裡會對cmy使用者的t表進行審計,但同時使用了by子句,所以只會對scott使用者發起的操作進行審計。
注意:Oracle沒有提供對schema中所有對象的審計功能,只能一個一個對象審計,對於後面建立的對象,Oracle則提供on default子句來實現自動審計,比如執行audit drop on default by access;後,對於隨後建立的對象的drop操作都會審計。但這個default會對之後建立的所有資料庫物件有效,似乎沒辦法指定只對某個使用者建立的對象有效,想比 trigger可以對schema的DDL進行“審計”,這個功能稍顯不足。
4、審計的一些其他選項
(1)by access / by session:
by access 每一個被審計的操作都會產生一條audit trail。
by session 一個會話裡面同類型的操作只會產生一條audit trail,預設為by session。
(2)whenever [not] successful:
whenever successful 操作成功(dba_audit_trail中returncode欄位為0) 才審計,
whenever not successful 反之。省略該子句的話,不管操作成功與否都會審計。
本文URL地址:http://www.bianceng.cn/database/Oracle/201410/45406.htm