学习Oracle的审计(Auditing)

审计(Audit)用于监视用户所执行的数据库操作,审计记录可存在数据字典表(称为审计记录:存储在system表空间中的 SYS.AUD$ 表中,可通过视图dba_audit_trail查看)或操作系统审计记录中(audit_file_dest参数决定)。默认情况下审计是没有开启的。

1、审计的类型有四种:

  • Statement Auditing(语句审计):在语句级别进行审计,如审计执行SELECT TABLE的语句,而不针对某一单独的对象。

  • Privilege Auditing(权限审计):审计某一系统权限的使用情况,如果审计在创建表时用到的CREATE ANY TABLE权限。

  • Schema Object Auditing(对象审计):审计对指定对象上的操作,如审计对表scott.emp的INSERT操作。

  • Fine-Grained Auditing(细粒度审计):用于指定更细粒度的审计,用DBMS_FGA包来实现。

2、相关参数:

AUDIT_TRAIL参数

这参数决定数据库审计的开启和关闭。可以被赋与如下值

  • DB,启用数据库审计,并把审计记录记录到数据库中的SYS.AUD$

  • XML,启用数据库审计,并把审计记录在文件系统以XML文件的开始存放

  • DB,EXTENDED,具有与DB一样的功能,并在必要时在SYS.AUD$中记录SQL bind and SQL text CLOB-type columns。

  • XML,EXTENDED,具有与XML一样的功能,并在可用时在XML文件中记录SQL bind and SQL text CLOB-type columns。

  • OS,启用数据库审计,并把审计记录记录到操作系统的文件中。

  • NONE,不启用数据库审计,默认值。

AUDIT_FILE_DEST参数

如果AUDIT_TRAIL=OS,则审计记录的文件,存放在AUDIT_FILE_DEST指定的目录中。

AUDIT_SYS_OPERATIONS参数

指定是否启用对SYS用户的审计。默认为FALSE,启用设置为TRUE。记录不存放在AUD$中,而是记录在其它地方。如果是windows平台,audti trail会记录在windows的事件管理中,如果是linux/unix平台则会记录在audit_file_dest参数指定的文件中。

3、启用和停用数据库审计

使用ALTER SYSTEM语句设置AUDIT_TRAIL参数,这个参数不可在线修改,修改后需重库数据库实例生效。例句如下:

ALTER SYSTEM SET AUDIT_TRAIL=DB,EXTENDED SCOPE=SPFILE;

停用数据库审计使用如下语句,重启数据库生效

ALTER SYSTEM SET AUDIT_TRAIL=NONE SCOPE=SPFILE;

4、启用和停止审计功能的语法:

1)启用审计使用AUDIT语句

wKiom1j-EfDxoTsbAAGXMKVir5E923.png

2)停止审计功能

要停用审计功能把上面的AUDIT改为NOAUDIT。

在启用审计功能前,必须先设置AUDIT_TRAIL参数为非NONE,否则数据库不会进行审计。

5、使用审计功能的示例

启用数据库审计

1
2
3
sys@TEST> alter  system  set  audit_trail=DB scope=spfile;
 
System altered.

1)Statement Auditing(语句审计)

审计由SCOTT用户发出的所有SELECT TABLE

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
sys@TEST>audit  select  table  by  scott;
 
Audit succeeded.
 
sys@TEST> select  from  dba_stmt_audit_opts;
 
USER_NAME              PROXY_NAME              AUDIT_OPTION             SUCCESS               FAILURE
------------------------------ ------------------------------ ------------------------------ ------------------------------ ------------------------------
SCOTT                                  SELECT  TABLE             BY  SESSION           BY  SESSION
 
scott@TEST> select  count (*)  from  emp;
 
   COUNT (*)
----------
     14
     
sys@TEST> select  timestamp ,sql_text  from  dba_audit_trail;
 
TIMESTAMP        SQL_TEXT
------------------- --------------------------------------------------------------------------------
2017-04-24 23:07:47  select  count (*)  from  emp

2)Privilege Auditing(权限审计)

审计所有系统权限

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
sys@TEST>audit  all  privileges ;
 
Audit succeeded.
 
sys@TEST> select  from  dba_priv_audit_opts;
 
USER_NAME              PROXY_NAME              PRIVILEGE           SUCCESS               FAILURE
------------------------------ ------------------------------ ------------------------------ ------------------------------ ------------------------------
                                   FLASHBACK ARCHIVE ADMINISTER    BY  ACCESS               BY  ACCESS
                                   CREATE  SESSION                  BY  ACCESS              BY  ACCESS
......
 
[oracle@rhel6 ~]$ sqlplus scott/tiger
......
sys@TEST> select  username, timestamp ,priv_used  from  dba_audit_trail  where  priv_used  is  not  null ;
 
USERNAME                TIMESTAMP     PRIV_USED
------------------------------ ------------------- ------------------------------------------------------------------------------------------------------------------------
SCOTT                  2017-04-24 23:18:02  CREATE  SESSION

3)Schema Object Auditing(对象审计)

审计对SCOTT.EMP表的select操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
sys@TEST>audit  select  on  scott.emp;
 
Audit succeeded.
 
sys@TEST> select  from  dba_obj_audit_opts;
 
OWNER      OBJECT_NAM OBJECT_TYPE            ALT   AUD   COM   DEL   GRA   IND     INS   LOC   REN   SEL     UPD   REF   EXE   CRE     REA   WRI   FBK
---------- ---------- ------------------------------ ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
SCOTT      EMP          TABLE                 -/-   -/-   -/-   -/-   -/-   -/-     -/-   -/-   -/-   S/S     -/-   -/-   -/-   -/-     -/-   -/-   -/-
 
scott@TEST> select  ename  from  emp;
 
ENAME
------------------------------
SMITH
ALLEN
......
 
sys@TEST> select  timestamp ,sql_text  from  dba_audit_trail;
 
TIMESTAMP        SQL_TEXT
------------------- --------------------------------------------------------------------------------
2017-04-24 23:24:28  select  ename  from  emp

AUD$位于SYSTEM表空间,基于Oracle的稳定性及性能考虑,可以将审计相关的表移动到其他表空间。

alter table audit$ move tablespace <tablespace_name>;
alter index i_audit rebuild online tablespace <tablespace_name>;
alter table audit_actions move tablespace <tablespace_name>;
alter index i_audit_actions rebuild online tablespace <tablespace_name>;


官方文档:http://docs.oracle.com/cd/B19306_01/network.102/b14266/auditing.htm#CHDJBDHJ

http://docs.oracle.com/cd/B19306_01/network.102/b14266/cfgaudit.htm#BABCFIHB

http://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_4007.htm#i2059073

参考:http://blog.itpub.net/9399028/viewspace-712457/





      本文转自hbxztc 51CTO博客,原文链接:http://blog.51cto.com/hbxztc/1919030,如需转载请自行联系原作者






  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值