天天看點

oracle開啟audit(審計)

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;