27.Oracle深度学习笔记——ORACLE审计

27.Oracle深度学习笔记——ORACLE审计

欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/50830894

审计(Audit)用于监视用户所执行的数据库操作,并且Oracle会将审计跟踪结果存放到OS文件(默认位置为$ ORACLE_BASE/admin/$ORACLE_SID/adump/)或数据库(存储在system表空间中的SYS.AUD$表中

不管是否打开数据库的审计功能,用管理员权限连接Instance;启动数据库;关闭数据库都会被记录。

1.  相关参数:

audit_sys_operations

 12C默认TRUE

当设置为true时,所有sys用户(包括以sysdba,sysoper身份登录的用户)的操作都会被记录,audit trail不会写在aud$表中,这个很好理解,如果数据库还未启动aud$不可用,那么像conn /as sysdba这样的连接信息,只能记录在其它地方。如果是windows平台,audti trail会记录在windows的事件管理中,如果是linux/unix平台则会记录在audit_file_dest参数指定的文件中。

audit_trail

12C默认DB

DB:将audit trail 记录在数据库的审计相关表中,如aud$,审计的结果只有连接信息;

DB,Extended:这样审计结果里面除了连接信息还包含了当时执行的具体语句;

OS:将audit trail 记录在操作系统文件中,文件名由audit_file_dest参数指定;

None:不做审计;

2.  审计级别

开启审计功能后,可在三个级别对数据库进行审计:Statement(语句)、Privilege(权限)、object(对象)。

Statement

 按语句审计,如audittable 会审计数据库中所有的create table,drop table,truncate table语句

Privilege

按权限来审计,当用户使用了该权限则被审计,如执行grant select any table to a,当执行了audit select anytable语句后,当用户a 访问了用户b的表时(如select * fromb.t)会用到select any table权限,故会被审计。注意用户是自己表的所有者,所以用户访问自己的表不会被审计。

Object:

按对象审计,只审计on关键字指定对象的相关操作,如aduit alter,delete,drop,insert on cmy.t by scott; 这里会对cmy用户的t表进行审计,但同时使用了by子句,所以只会对scott用户发起的操作进行审计。注意Oracle没有提供对schema中所有对象的审计功能,只能一个一个对象审计,对于后面创建的对象,Oracle则提供on default子句来实现自动审计,比如执行audit drop on default by access;后,对于随后创建的对象的drop操作都会审计。但这个default会对之后创建的所有数据库对象有效,似乎没办法指定只对某个用户创建的对象有效,想比 trigger可以对schema的DDL进行“审计”,这个功能稍显不足。

3.  审计相关的视图

dba_audit_trail

保存所有的audit trail,只是一个基于aud$的视图。其它的视图dba_audit_session,dba_audit_object, dba_audit_statement都只是dba_audit_trail的一个子集。

dba_stmt_audit_opts

可以用来查看statement审计级别的audit options,即数据库设置过哪些statement级别的审计。dba_obj_audit_opts,dba_priv_audit_opts视图功能与之类似

all_def_audit_opts

用来查看数据库用on default子句设置了哪些默认对象审计。

其他相关视图

STMT_AUDIT_OPTION_MAP    -- 审计选项类型代码

AUDIT_ACTIONS    -- action代码

ALL_DEF_AUDIT_OPTS    -- 对象创建时默认的对象审计选项

DBA_STMT_AUDIT_OPTS    -- 当前数据库系统审计选项

DBA_PRIV_AUDIT_OPTS    -- 权限审计选项

DBA_OBJ_AUDIT_OPTS

USER_OBJ_AUDIT_OPTS    -- 对象审计选项

DBA_AUDIT_TRAIL

USER_AUDIT_TRAIL    -- 审计记录

DBA_AUDIT_OBJECT

USER_AUDIT_OBJECT    -- 审计对象列表

DBA_AUDIT_SESSION

USER_AUDIT_SESSION    -- session审计

DBA_AUDIT_STATEMENT

USER_AUDIT_STATEMENT    -- 语句审计

DBA_AUDIT_EXISTS    -- 使用BY AUDITNOT EXISTS选项的审计

DBA_AUDIT_POLICIES    -- 审计POLICIES

DBA_COMMON_AUDIT_TRAIL    --标准审计+精细审计

 

4.  测试操作

激活审计

查看是否开启了审计如下:

sys@TOADDB> show parameter audit;

 

NAME                                        TYPE       VALUE

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

audit_file_dest                      string     /u01/app/oracle/admin/toaddb/a

                                                         dump

audit_sys_operations                    boolean TRUE

audit_syslog_level                 string

audit_trail                                string     DB

unified_audit_sga_queue_size            integer   1048576

因为12C默认开启了,

手动开启如下:

SQL> alter system set audit_sys_operations=TRUEscope=spfile;  

开始审计

创建表如下:

sys@TOADDB> conn tpcc/tpcc

Connected.

tpcc@TOADDB> create table t as select * fromdba_objects where rownum <= 5000;

Table created.

使能审计

tpcc@TOADDB> audit all on t;

Audit succeeded.

tpcc@TOADDB> select * from t;

…..

tpcc@TOADDB> delete from t;

5000 rows deleted.

tpcc@TOADDB> commit;

Commit complete.

进行查看如下:

SQL>conn / as sysdba

col DEST_NAME format a30

col OS_USERNAME format a15

col USERNAME format a15

col USERHOST format a15

col TERMINAL format a15

col OBJ_NAME format a30

col SQL_TEXT format a60

sys@TOADDB> selectOS_USERNAME,username,USERHOST,TERMINAL,TIMESTAMP,OWNER,obj_name,ACTION_NAME,sessionid,os_process,sql_textfrom dba_audit_trail;

OS_USERNAME        USERNAME      USERHOST        TERMINAL        TIMESTAMP

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

OWNER

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

OBJ_NAME                       ACTION_NAME               SESSIONIDOS_PROCESS

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

SQL_TEXT

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

oracle                TPCC                  OEL           pts/1                  07-MAR-16

TPCC

T                                 AUDIT OBJECT                     493030 5126

 

 

oracle                TPCC                  OEL           pts/1                  07-MAR-16

TPCC

T                                 SELECT                                   4930305126

 

 

oracle                TPCC                  OEL           pts/1                  07-MAR-16

TPCC

T                                 DELETE                                   4930305126

可以发现对表T做够的所有操作都出现了。

撤销审计

SQL> noaudit all on t;

你可能感兴趣的:(Oracle)