/ 中存储网

如何查看oracle是否开启了审计功能?

2017-07-06 20:51:46 来源:中存储

1、查看审计功能是否开启(本机已经开启,如果audit_sys_operations值为FALSE就是没开审计)

  1. SQL> CONN /AS SYSDBA  
  2. SQL> show parameter audit  
  3. NAME                                 TYPE        VALUE  
  4. ------------------------------------ ----------- ------------------------------  
  5. audit_file_dest                      string      F:APPADMINISTRATORADMINORCLADUMP  
  6. audit_sys_operations                 boolean     TRUE  
  7. audit_trail                          string      DB_EXTENDED    

如果没有使用下面语句更改:

  1. SQL> alter system set audit_trail=db_extended scope=spfile;  

注意audit_trail要为DB_EXTENDED才记录执行的具体语句...

2、重启实例

  1. SQL> shutdown immediate;  
  2. SQL> startup  

3、针对某表的DML审计(错误的也记录)

  1. SQL> AUDIT UPDATE,DELETE,INSERT ON T_TEST by access;  

4、对该表做各种DML操作

用scott用户登录

  1. SQL> conn scott/123        
  2. SQL> create table t_test as select * from emp;  
  3. SQL> update t_test set emp1='111';                     *  
  4. 第 1 行出现错误:  
  5. ORA-00904: "EMP1": 标识符无效       
  6. SQL> delete from t_test where rownum=1;    
  7. 已删除 1 行。    
  8. SQL> commit;  

5、查询审计信息

  1. SQL> select EXTENDED_TIMESTAMP,SESSION_ID,SQL_TEXT     
  2. SQL> from DBA_COMMON_AUDIT_TRAIL ORDER BY EXTENDED_TIMESTAMP DESC;  

或者

  1. SQL> select EXTENDED_TIMESTAMP,SESSION_ID,SQL_TEXT from DBA_COMMON_AUDIT_TRAIL  
  2. SQL> where OBJECT_NAME='T_TEST'  
  3. SQL> and STATEMENT_TYPE in ('INSERT','UPDATE','DELETE');  

---结果:

  1. SQL> /    
  2. EXTENDED_TIMESTAMP                       SESSION_ID SQL_TEXT  
  3. ---------------------------------------- ---------- ----------------------------  
  4. ------------  
  5. 14-8月 -12 04.14.45.187000 下午 +08:00       190125 update t_test set emp1='111'  
  6. 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也可以实现上述审计:

用法创建审计策略:

  1. Syntax    
  2. DBMS_FGA.ADD_POLICY(  
  3.    object_schema   VARCHAR2,   
  4.    object_name     VARCHAR2,   
  5.    policy_name     VARCHAR2,   
  6.    audit_condition VARCHAR2,   
  7.    audit_column    VARCHAR2,   
  8.    handler_schema  VARCHAR2,   
  9.    handler_module  VARCHAR2,    
  10.    enable          BOOLEAN  );  

删除审计策略:

  1. DBMS_FGA.DROP_POLICY(  
  2.    object_schema  VARCHAR2,   
  3.    object_name    VARCHAR2,   
  4.    policy_name    VARCHAR2 );  

启用审计策略:

  1. DBMS_FGA.ENABLE_POLICY(  
  2.    object_schema  VARCHAR2 := NULL,  
  3.    object_name    VARCHAR2,  
  4.    policy_name    VARCHAR2,  
  5.    enable         BOOLEAN := TRUE);  

禁用审计策略:

  1. DBMS_FGA.DISABLE_POLICY(  
  2.    object_schema  VARCHAR2,   
  3.    object_name    VARCHAR2,   
  4.    policy_name    VARCHAR2 );   

首先,创建审计策略

  1. SQL> conn /as sysdba  
  2. 已连接。  
  3. SQL> begin  
  4.   2  dbms_fga.add_policy  
  5.   3  (  
  6.   4  object_schema=>'SCOTT',object_name=>'T_TEST',  
  7.   5  policy_name=>'Test_audit'  
  8.   6  );  
  9.   7  end;  
  10.   8  /  
  11.   
  12. PL/SQL 过程已成功完成。  
  13.   
  14. SQL> conn scott/tigger  

进行查询

  1. SQL> select ename from t_test;  

使用SYS登录进行查询,

  1. SQL> select statement_type,SQL_TEXT from dba_fga_audit_trail;  
  2.   
  3. STATEME SQL_TEXT  
  4. ------- ----------------------------------------  
  5. SELECT  select ename from t_test  

 ------------

注意: 经过测试发现审计到的SQL语句存在着大小写2种格式。

直接执行的SQL语句,是什么样的语句,审计到的也就是什么样。

在存储里执行的语句,审计到的全是大写的语句。

存储里动态执行的语句,是什么样的语句,审计到的也就是什么样的语句。