oracle審計(整理自網路)

shawnloong發表於2015-09-24

審計相關引數:
Audit_sys_operations
預設為false,當設定為true時,所有sys使用者(包括以sysdba, sysoper身份登入的使用者)的操作都會被記錄,audit trail不會寫在aud$表中,這個很好理解,
如果資料庫還未啟動aud$不可用,那麼像conn /as sysdba這樣的連線資訊,只能記錄在其它地方。如果是windows平臺,audti trail會記錄在windows的事件管理中,
如果是linux/unix平臺則會記錄在audit_file_dest引數指定的檔案中


Audit_trail
None:是預設值,不做審計;
DB:將audit trail 記錄在資料庫的審計相關表中,如aud$,審計的結果只有連線資訊;
DB,Extended:這樣審計結果裡面除了連線資訊還包含了當時執行的具體語句;
OS:將audit trail 記錄在作業系統檔案中,檔名由audit_file_dest引數指定;
XML:10g裡新增的。
XML,Extended
注:這兩個引數是static引數,需要重新啟動資料庫才能生效


官方文件解析
DB                 Enables database auditing and directs all audit records to the database audit trail (SYS.AUD$), except for records that are 
always written to the operating system audit trail 


XML         All elements of the AuditRecord node except Sql_Text and Sql_Bind will be printed to the operating system XML audit file. 


DB,EXTENDED        Does all actions of AUDIT_TRAIL=DB and also populates the SQL bind and SQL text CLOB-type columns of the SYS.AUD$ 
table, wherever possible. (These two columns are populated only when this parameter is specified.) 


XML,EXTENDED         Does all actions of AUDIT_TRAIL=XML and also populates the SQL bind and SQL text CLOB-type columns of the SYS.AUD$ table,
 wherever possible. (These columns are populated only when this parameter is specified.) 
 
OS                 Enables database auditing and directs all audit records to an operating system file 
NONE         Disables standard auditing (This value is the default.) 




審計資訊存放到db或os,各有優劣之處;os可以減少db的負擔,且在db down了之後仍可檢視,但管理不方便,且只要有os許可權的人員都可以檢視及篡改;
db,資訊可更詳細,檢視方便,但容易給db額外的負擔,且在資料庫損害的情況下,審計資訊同時丟失


審計級別
開啟審計功能後,可在三個級別對資料庫進行審計:Statement(語句)、Privilege(許可權)、object(物件)


Statement
語句審計,對某種型別的SQL語句審計,不指定結構或物件。比如audit table 會審計資料庫中所有的create table,droptable,truncate table語句,
alter session by test;--會審計test使用者所有的資料庫連線。


只審計某種型別的SQL語句,可對特定使用者,也可所有使用者。
AUDIT sql_statements [by user_name] [by session|access]
                [whenever [not] successful]
SQL> audit select table by scott by access;                # 審計soctt的所有select操作
SQL> audit table by access;   審計TABLE操作,包括CREATE/DROP/TRUNCATE


檢視當前作了哪些審計
SQL> SELECT USER_NAME,AUDIT_OPTION,SUCCESS,FAILURE 
                FROM DBA_STMT_AUDIT_OPTS;

檢視審計結果
SQL> select USERNAME,SQL_TEXT,TIMESTAMP from dba_audit_trail;
取消審計
SQL> noaudit table;

 SQL> audit all on scott.emp;   # 審計對scott.emp表的所有操作

審計的一些其他選項
        by access / by session
                by access  每一個被審計的操作都會生成一條audit trail。
        by session 一個會話裡面同型別的操作只會生成一條audit trail,預設為by session。
        If you use the BY SESSION clause when directing audit records to the operating system audit trail, then Oracle Database generates and stores an audit record each time an access is made. Therefore, in this auditing configuration, BY SESSION is equivalent to BY ACCESS.(如果audit檔案寫在os時,by session 和 by access相同)


whenever [not] successful
        whenever successful 操作成功(dba_audit_trail中returncode欄位為0) 才審計,
        whenever not successful 反之。省略該子句的話,不管操作成功與否都會審計。
        
audit select table 


和審計相關的檢視
dba_audit_trail:儲存所有的audit trail,實際上它只是一個基於aud$的檢視。其它的檢視        
dba_audit_session,dba_audit_object,dba_audit_statement都只是dba_audit_trail的一個子集。
dba_stmt_audit_opts:可以用來檢視statement審計級別的audit options,即資料庫設定過哪些statement級別的審計。dba_obj_audit_opts,dba_priv_audit_opts檢視功能與之類似
all_def_audit_opts:用來檢視資料庫用on default子句設定了哪些預設物件審計。


取消審計
將對應審計語句的audit改為noaudit即可,
如audit session whenever successful
對應的取消審計語句為noaudit session whenever successful


清理審計
a. DELETE FROM SYS.AUD$;
DELETE FROM SYS.AUD$ WHERE obj$name='EMP';
b. Truncate SYS.AUD$


審計歸檔
a. INSERT INTO table SELECT ... FROM SYS.AUD$ ...
b. export
truncate 或者 delete sys.aud$ 表
在delete 之前,可以先把aud$表exp備份一下,注意,不要直接exp,先建立一張臨時表,然後將臨時表exp。
sql>create table audit_record tablespace users as select * from sys.aud$;


然後exp:
exp tables=AUDIT_RECORD file=audit_record.dmp
最後delete 資料:
sql>delete from sys.aud$;
或者刪除指定表的審計:
sql>delete from sys.aud$ whereobj$name='&table_nmae';
注意,delete 不會釋放system表空間。 可以使用truncate table:
sql>truncate table sys.aud$


將審計相關的表移動到其他表空
由於AUD$表等審計相關的表存放在SYSTEM表空間,因此為了不影響系統的效能,保護SYSTEM表空間,最好把AUD$移動到其他的表空間上。可以使用下面的語句來進行移動:
sql>connect / as sysdba;
sql>alter table aud$ move tablespace<new tablespace>;
sql>alter index I_aud1 rebuild onlinetablespace <new tablespace>;
SQL> alter table audit$ move tablespace<new tablespace>;
SQL> alter index i_audit rebuild onlinetablespace <new tablespace>;
SQL> alter table audit_actions movetablespace <new tablespace>;
SQL> alter index i_audit_actions rebuildonline tablespace <new tablespace>;


也可以用DBMS_AUDIT_MGMT實現遷移
conn / as sysdba
BEGIN
  DBMS_AUDIT_MGMT.SET_AUDIT_TRAIL_LOCATION(audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_DB_STD,
  audit_trail_location_value => 'USERS');
END;
/
驗證DBMS_AUDIT_MGMT效果
SQL> select segment_name,tablespace_name from dba_segments where 
segment_name in('AUD$','SYS_IL0000000384C00040$$','SYS_IL0000000384C00041$$', 'AUDIT$','I_AUDIT','AUDIT_ACTIONS','I_AUDIT_ACTIONS');


SQL> BEGIN
  DBMS_AUDIT_MGMT.SET_AUDIT_TRAIL_LOCATION(audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_DB_STD,
  audit_trail_location_value => 'USERS');
END;
/



SQL> select segment_name,tablespace_name from dba_segments where segment_name in('AUD$','SYS_IL0000000384C00040$$','SYS_IL0000000384C00041$$',
'AUDIT$','I_AUDIT','AUDIT_ACTIONS','I_AUDIT_ACTIONS');





2.該包可以實現線上遷移,特別是在高業務的系統中,可以實現線上遷移,而人工的move操作不能實現線上處理
3.對於AUD$物件,如果登入審計資料不是非常重要,可以透過truncate來解決一時的問題,在業務高的系統,可能truncate不能馬上操作成功,可以嘗試使用11gr2的新特性alter session set ddl_lock_timeout = 10;來實現自動ddl嘗試
4.如果確定不需要登入審計功能,可以透過設定audit_trail=none來關閉(需要重啟例項)

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24486203/viewspace-1808657/,如需轉載,請註明出處,否則將追究法律責任。

相關文章