oracle开启audit(审计功能)audit_sys_operations

  • A+
所属分类:数据库

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

 sqlplus /nolog

SQL> CONN /AS SYSDBA
SQL> show parameter audit

NAME TYPE VALUE
------------------------------------ ----------- -------
audit_file_dest string F:\APP\ADMINISTRATOR\ADMIN\ORCL\ADUMP
audit_sys_operations boolean TRUE
audit_trail string DB_EXTENDED

 

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

SQL> alter system set audit_sys_operations=TRUE scope=spfile;
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

SQL> from DBA_COMMON_AUDIT_TRAIL ORDER BY EXTENDED_TIMESTAMP DESC;

 

或者

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(
object_schema VARCHAR2,
object_name VARCHAR2,
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> 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;

 

avatar

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: