1、審計(Audit):
對用戶所執行的數據庫活動的跟蹤記錄,便於事后監督、檢查。
審計信息存放位置:
審計記錄信息,存儲在system表空間中的SYS.AUD$數據字典表;
或操作系統默認位置$ORACLE_BASE/admin/$ORACLE_SID/adump/;
Oracle 11G以后,數據庫默認是開啟審計功能的,因此有時候我們忘記了關閉該功能導致SYSTEM表空間暴滿,但由於關閉審計功能需要重啟數據庫,此類操作生產環境下是不允許的,因此我們需要找出哪類審計產生的較多,然后單獨的進行關閉;我們可以通過如下方法查找:如果你發現AUD$這個表比較大了,檢查下是哪種審計占的空間:
SQL> select action_name,count(*) from dba_audit_trail group by action_name;
--一般是LOGON和LOGOFF類型的審計最多。取消此類審計:
SQL> noaudit session whenever successful;
--一般來說,如果空間不是占的特別多,此類審計還是保留為好。可以取消對一些登錄特別頻繁的用戶的審計,比如DBSNMP用戶:
SQL> noaudit session by U007;
--關閉審計后,對表sys.aud$進行清理
select * from sys.aud$;
truncate table selsys.aud$;
審計參數AUDIT_TRAIL
參數值取值列表:
(1).DB/TRUE ---- 啟用審計,並且把審計結果存放在數據庫的SYS.AUD$表中
(2).OS ---- 啟用審計,並把審計結果存放在操作系統的審計信息中
(3).DB_EXTENDED ---- 啟用審計,把審計結果存放在數據庫SYS.AUD$表中,並在CLOB列的SQLBIND和SQLTEXT字段記錄額外的信息;
(4).XML ---- 啟用審計,以XML格式寫所有審計記錄;
(5).EXTENDED ---- 啟用審計,在審計跟蹤中記錄所有列,包括SQLTEXT和SQLBIND值
(6).NONE/FALSE ---- 禁用審計
以下步驟設置Oracle的審計功能:
(1).修改審計參數AUDIT_TRAIL:
Alter system set AUDIT_TRAIL=DB scope=spfile;
(2).初始化數據庫審計功能:
以connect /as sysdba執行腳本cataudit.sql,腳本位置D:\app\Administrator\product\11.2.0\dbhome_1\RDBMS\ADMIN;
(3).重啟數據庫:
由於參數AUDIT_TRAIL不是動態的,需要關閉數據庫重啟生效。
2、審計分類和用法:
語句審計:
--語法
AUDIT sql_statement_clause [BY user_name] | [BY [SESSION | ACCESS]
WHENEVER [NOT] SUCCESSFUL]
參數說明:
sql_statement_clause ---- SQL語句或選項;
BY ACCESS ---- 存取方式,每條語句被執行一次都要審計,不管語句是否相同;
BY SESSION ---- 會話方式,相同的語句只被審計一次,這也是系統默認方式;
WHENEVER SUCCESSFUL ---- 表示只對成功語句進行審計;
WHENEVER NOT SUCCESSFUL ---- 表示只對不成功語句進行審計。
--舉例:
--(1).審計用戶對對象的操作:
Audit table by scott;
--(2).審計用戶執行的SQL語句:
Audit create table by scott;
Audit insert table by u0007; ---- 審計insert into表或視圖;
Audit delete table by u0007; ---- 審計刪除表或視圖中的行;
--(3).指定審計方式:
Audit delete table by u0007 by access; ---- 存取方式,每條語句執行一次都要審計;
--(4).審計成功與不成功的會話:
Audit session by u007 whenever not successful; ---- 只對不成功語句進行審計;
--(5).了解哪些用戶進行了審計,可查詢數據字典視圖DBA_STMT_AUDIT_OPTS
select * from dba_stmt_audit_opts where user_name='U007';
--(6).停止語句審計:
Noaudit alter table by U007;
權限審計:
--語法:
AUDIT privilege [BY user_name] | [BY [SESSION | ACCESS]
WHENEVER [NOT] SUCCESSFUL]
對象審計:
--語法:
AUDIT schema_object_clause ON schema
[BY user_name] | [BY [SESSION | ACCESS]
WHENEVER [NOT] SUCCESSFUL]
Audit select,insert,delete on scott.dept by access;
3、細粒度審計(FGA)
是由DBMS_FGA的PL/SQL程序實現的