1、檢視審計功能是否開啟(本機已經開啟,如果audit_sys_operations值為FALSE就是沒開審計)
SQL> CONN /AS SYSDBA
SQL> show parameter audit
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
audit_file_dest string F:APPADMINISTRATORADMINORCLADUMP
audit_sys_operations boolean TRUE
audit_trail string DB_EXTENDED
如果沒有使用下面語句更改:
SQL> alter system set audit_trail=db_extended scope=spfile;
注意audit_trail要為DB_EXTENDED才記錄執行的具體語句...
2、重新開機執行個體
SQL> shutdown immediate;
SQL> startup
3、針對某表的DML審計(錯誤的也記錄)
SQL> AUDIT UPDATE,DELETE,INSERT ON T_TEST by access;
4、對該表做各種DML操作
用scott使用者登入
SQL> conn scott/123
SQL> create table t_test as select * from emp;
SQL> update t_test set emp1='111';
*
第 1 行出現錯誤:
ORA-00904: "EMP1": 辨別符無效
SQL> delete from t_test where rownum=1;
已删除 1 行。
SQL> commit;
5、查詢審計資訊
SQL> select EXTENDED_TIMESTAMP,SESSION_ID,SQL_TEXT from DBA_COMMON_AUDIT_TRAIL ORDER BY EXTENDED_TIMESTAMP DESC;
SQL>
或者
SQL> select EXTENDED_TIMESTAMP,SESSION_ID,SQL_TEXT from DBA_COMMON_AUDIT_TRAIL
SQL> where OBJECT_NAME='T_TEST'
SQL> and STATEMENT_TYPE in ('INSERT','UPDATE','DELETE');
--結果:
SQL> /
EXTENDED_TIMESTAMP SESSION_ID SQL_TEXT
---------------------------------------- ---------- ----------------------------
14-8月 -12 04.14.45.187000 下午 +08:00 190125 update t_test set emp1='111'
14-8月 -12 04.26.02.968000 下午 +08:00 190125 delete from t_test where rownum=1
注意:審計一般隻用于對普通使用者操作,一般不審計SYS使用者
對于windows系統,對sys使用者的審計資訊并不存在AUDIT_FILE_DEST參數指定的目錄裡,而是在windows的事件管理器中。
另外通過細粒度審計FGA也可以實作上述審計:
用法建立審計政策
Syntax
DBMS_FGA.ADD_POLICY(
object_schema VARCHAR2,
object_name VARCHAR2,
policy_name VARCHAR2,
audit_condition VARCHAR2,
audit_column VARCHAR2,
handler_schema VARCHAR2,
handler_module VARCHAR2,
enable BOOLEAN );
删除審計政策:
DBMS_FGA.DROP_POLICY(
object_schema VARCHAR2,
object_name VARCHAR2,
policy_name VARCHAR2 );
啟用審計政策:
DBMS_FGA.ENABLE_POLICY(
object_schema VARCHAR2 := NULL,
object_name VARCHAR2,
policy_name VARCHAR2,
enable BOOLEAN := TRUE);
禁用審計政策:
DBMS_FGA.DISABLE_POLICY(
policy_name VARCHAR2 );
首先,建立審計政策
SQL> conn /as sysdba
已連接配接。
SQL> begin
2 dbms_fga.add_policy
3 (
4 object_schema=>'SCOTT',object_name=>'T_TEST',
5 policy_name=>'Test_audit'
6 );
7 end;
8 /
PL/SQL 過程已成功完成。
SQL> conn scott/tigger
進行查詢
[sql] view plain copy
SQL> select ename from t_test;
使用SYS登入進行查詢,
SQL> select statement_type,SQL_TEXT from dba_fga_audit_trail;
STATEME SQL_TEXT
------- ----------------------------------------
SELECT select ename from t_test
------------
注意: 經過測試發現審計到的SQL語句存在着大小寫2種格式。
直接執行的SQL語句,是什麼樣的語句,審計到的也就是什麼樣。
在存儲裡執行的語句,審計到的全是大寫的語句。
存儲裡動态執行的語句,是什麼樣的語句,審計到的也就是什麼樣的語句。
BEGIN
EXECUTE immediate 'delete FrOm emp WHERE ROWNUM=1';
END;
審計到的就是
DELETE delete FrOm emp WHERE ROWNUM=1;