[Oracle]Audit(一)–认识Audit

1.Audit的概念

Audit是监视以及著录用户对数据库进行的操作,以供DBA进行问题分析。利用Audit功能,可以做到以下任务:

  • 蹲点与采集特定数据库活动的数据。例如管理员会审计哪些表被更新,在某时刻接触及出小只相用户统计数据;
  • 担保用户指向好之倒负责。这些走包括在特定模式、特定表、特定行等目标上开展的操作;
  • 审计数据库被的可疑活动。如一个未经授权的用户正由表中删除数据,那么数据库管理员必须审计所有数据库连接,以及当数据库中持有成功与挫折的删减操作。

因审计项目不同,审计记录面临之音也截然不同。通常,一长达审计记录被含用户称、会话标识、终端标识、所操作的模式对象名称、执行之操作、执行之完好语句代码、日期以及日穿、所用的系统权限。

 

2.Audit的分类

每当oracle 11g中,一共来4栽审计项目:

  • 话审计(Statement
    Auditing):对一定的SQL语句进行审计,不指定具体对象;
  • 权限审计(Privilege Auditing):对特定的体系权限行使状况开展审计;
  • 对象审计(Object
    Auditing):对特定的模式对象及实施之一定语句进行审计;
  • 网络审计(Network
    Auditing):对网络协议错误和网络层内部错误进行审计。

除此以外,根据用户是否成功推行,可以分为对推行成功的讲话进行审计、对无成事的语句进行审计、无论成功吗还进行审计。

因对同一个话审计次数不同,可以分为会话审计和存取审计。会话审计是恃对某用户要有所用户之等同语句只审计一不行,形成一致长条审计记录;存取审计是赖对某用户还是具备用户的如出一辙语句每执行同一次等审计一不成,形成多久审计记录。

 

3.审计环境设置

采用审计功能,需要针对数据库初始化参数AUDIT_TRAIL进行设置,其参数值可以啊:

  • none:不启用审计功能;
  • db:启用审计功能,审计信息写入sys.aud$数据字典中,审计的结果只有连接信息(sys用户的记录及强制性要求的笔录都写副操作系统文件中);
  • db_extended:审计结果除了发连日信息,还有执行的现实性语句。关于db与db_extended的区别,见例子1;
  • os:启用审计功能,审计信息写副操作系统文件;
  • xml:启用审计功能,审计信息写副xml格式的操作系统文件中;

查是否启用了审计功能:

SQL> show parameter audit_trail

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
audit_trail                          string      DB

修改审计环境参数:

SQL> alter system set audit_trail = 'DB_EXTENDED' scope = spfile;  

System altered

SQL> shutdown immediate;  

需要重启数据库

SQL> startup;

 

4.审计详解

4.1 语句审计(Statement
auditing)

(1)语句审计是本着一定的SQL语句进行审计,与现实的靶子没涉及。创建语词审计的着力语法为:

AUDIT

 sql_statement_

shortcut | ALL |

ALL STATEMENTS

[BY user_lists]
| [IN SESSION
CURRENT]
[BY SESSION | ACCESS]
[WHENEVER
[NOT]
SUCCESSFUL]

解释:

– sql_statement_shortcut:被审计的SQL语句的快捷方式;

– ALL:审计大部分SQL语句,这里不以列出;

– ALL
STATEMENT:对最高级别的SQL语句进行审计,即对一直实施之SQL语句进行审计,而未对准含蓄在PL/SQL程序中的SQL语句进行审计;

– BY user_lists:指定审计的用户,如果不点名,则审计全用户;

– IN SESSION CURRENT:只针对当下对话进行审计;

– BY SESSION:会话审计,同一个SQL语句只审计一软;

– BY ACCESS:存取审计,同一个SQL语句执行几赖就是审计几赖;

– WHENEVER SUCCESSFUL:只审计实行成功的SQL语句;

– WHENEVER NOT SUCCESS:只审计实行不成事之SQL语句;

(2)如果假定撤回针对某个语句的审计,只待将AUDIT命令改吗NOAUDIT命令即可,其语法与创造AUDIT相同。

(3)通过数据字典DBA_STMT_AUDIT_OPTS可以了解当下数据库哪些用户进行了话审计和审计设置信息。例如,查看和scott用户相关的话语审计:

SQL> select * from dba_stmt_audit_opts where user_name='SCOTT';

USER_NAME PROXY_NAME  AUDIT_OPTION    SUCCESS    FAILURE
--------- ----------- --------------- ---------- ----------
SCOTT                 TABLE           BY ACCESS  BY ACCESS
SCOTT                 INSERT TABLE    BY ACCESS  BY ACCESS

 

事例1.每当scott模式下创造表test02,查看其审计信息。

查看audit_trace参数

SQL> show parameter audit_trail

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
audit_trail                          string      DB

step1.对scott用户创建语句审计

audit table
by scott
by access

audit insert table
by scott
by access

step2.创建表test02,插入2行数据:

SQL> show user;
User is "SCOTT"

SQL> create table test02
    (
       id number,
       name varchar(40),
       local varchar(50)
   );

Table created

SQL> commit;

Commit complete

SQL> insert into test02
     values(1,'lihua','chengdu');

SQL> insert into test02 values(2,'ll','dd');

1 row inserted

SQL> commit;

Commit complete

step3.查看sys.aud$和sys.audit_actions视图

select
  a.userid,
  a.userhost,
  a.terminal,
  a.action#,
  aa.name,
  dbms_lob.substr(a.sqltext) as sqltext,
  dbms_lob.substr(a.sqlbind) as sqlbind,
  a.obj$creator,  
  a.obj$name,
  a.ntimestamp#
from 
  sys.aud$ a,
  sys.audit_actions aa
where
  a.obj$name = 'TEST02'
and
  a.action# = aa.action
and
  a.ntimestamp# > to_date('20170412','yyyymmdd');

结果为:

USERID  USERHOST                   TERMINAL         ACTION# NAME          SQLTEXT                                SQLBIND  OBJ$CREATOR OBJ$NAME A.NTIMESTAMP#+8/24
------- -------------------------- ---------------- ------- ------------- -------------------------------------- -------- ----------- -------- ------------------
SCOTT   WORKGROUP\DESKTOP-TKAPD8E  DESKTOP-TKAPD8E        1 CREATE TABLE                                                  SCOTT       TEST02   2017/4/15 13:58:54
SCOTT   WORKGROUP\DESKTOP-TKAPD8E  DESKTOP-TKAPD8E        2 INSERT                                                        SCOTT       TEST02   2017/4/15 14:00:00
SCOTT   WORKGROUP\DESKTOP-TKAPD8E  DESKTOP-TKAPD8E        2 INSERT                                                        SCOTT       TEST02   2017/4/15 15:27:26

成sys.aud$和sys.audit.actions,我们而及相对数据库进行了create
table和2次insert操作,但是我们尚是免知晓具体信息。接下来,我们将audit_trail参数改吗:audit_trail
= db_extended。

step4.修改audit_trail参数

SQL> alter system set audit_trail = 'DB_EXTENDED' scope = spfile;
System altered

SQL> shutdown immediate ;
SQL>startup;

SQL> show parameter audit_trail

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
audit_trail                          string      DB_EXTENDED

此时,再向test02表插入1行数据

SQL> insert into test02 values(3,'cc','vv');
1 row inserted

SQL> commit;
Commit complete

step5.重新翻开sys.aud$和sys.audit_actions视图

USERID  USERHOST                   TERMINAL         ACTION# NAME          SQLTEXT                                SQLBIND  OBJ$CREATOR OBJ$NAME A.NTIMESTAMP#+8/24
------- -------------------------- ---------------- ------- ------------- -------------------------------------- -------- ----------- -------- ------------------
SCOTT   WORKGROUP\DESKTOP-TKAPD8E  DESKTOP-TKAPD8E        1 CREATE TABLE                                                  SCOTT       TEST02   2017/4/15 13:58:54
SCOTT   WORKGROUP\DESKTOP-TKAPD8E  DESKTOP-TKAPD8E        2 INSERT                                                        SCOTT       TEST02   2017/4/15 14:00:00
SCOTT   WORKGROUP\DESKTOP-TKAPD8E  DESKTOP-TKAPD8E        2 INSERT                                                        SCOTT       TEST02   2017/4/15 15:27:26
SCOTT   WORKGROUP\DESKTOP-TKAPD8E  DESKTOP-TKAPD8E        2 INSERT       insert into test02 values(3,'cc','vv')           SCOTT       TEST02   2017/4/15 16:31:53

足看出,在SQLTEXT栏位来了现实的实践SQL语句。

 

4.2 权限审计

(1)权限审计是针对性特定的系权限进行审计,语法为:

AUDIT

 system_privilege | 

[ALL
PRIVILEGES] [BY user_lists]
| [IN SESSION
CURRENT]
[BY SESSION | ACCESS]
[WHENEVER [NOT]
SUCCESSFUL]

(2)如果如了解时数据库被对怎么用户用了哟权限审计,可以经数据字典DBA_PRIV_AUDIT_OPTS来查看。

事例2.针对scott用户之select any table权限进行审计

step1.翻scott的网权限

SQL> select * from dba_sys_privs where grantee = 'SCOTT';

GRANTEE                        PRIVILEGE                                ADMIN_OPTION
------------------------------ ---------------------------------------- ------------
SCOTT                          CREATE ANY TABLE                         NO
SCOTT                          UNLIMITED TABLESPACE                     NO
SCOTT                          CREATE ANY VIEW                          NO

step2.运scott用户,在模式‘LIJIAMAN’下开创表test03,查询其审计信息:

USERID  USERHOST                   TERMINAL           ACTION# NAME         SQLTEXT                       SQLBIND  OBJ$CREATOR  OBJ$NAME  A.NTIMESTAMP#+8/24
------  -------------------------  --------------- ---------- ------------ ----------------------------  -------- ------------ --------- ------------------
SCOTT   WORKGROUP\DESKTOP-TKAPD8E  DESKTOP-TKAPD8E          1 CREATE TABLE create table lijiaman.test03           LIJIAMAN     TEST03    2017/4/15 19:08:20
                                                                           (                                                                               
                                                                           id number,                                                                      
                                                                           name varchar(20)                                                                
                                                                           )

step3.动scott用户,在scott下开创表test05,查询其审计信息:

USERID   USERHOST                   TERMINAL            ACTION# NAME            SQLTEXT              SQLBIND   OBJ$CREATOR  OBJ$NAME   A.NTIMESTAMP#+8/24
-------  -------------------------- ---------------- ---------- --------------- -------------------- --------- ------------ ---------- ------------------
SCOTT    WORKGROUP\DESKTOP-TKAPD8E  DESKTOP-TKAPD8E           1 CREATE TABLE                                   SCOTT        TEST05     2017/4/15 19:38:24
                                                                                create table test05                                    
                                                                                (                                                      
                                                                                id number,                                             
                                                                                name varchar(30)                                       
                                                                                )

通过这个是例子,我们得以视,只要scott用户以select any
table权限,我们尽管好透过审计得到那个操作信息。

 

4.3 对象审计

(1)对象审计是赖对特定模式对象的操作进行审计,与用户无关,语法为:

AUDIT

 sql_operation | 

ALL ON
[schema.]object] [BY user_lists]
| [IN SESSION
CURRENT][BY SESSION | ACCESS]
[WHENEVER [NOT]
SUCCESSFUL]

其中,sql_operation指定了特定目标及万一审计的SQL语句。

(2)如果一旦翻开时数据库哪些模式对象开展了对象审计,可以透过询问DBA_OBJ_AUDIT_OPTS获得。

事例3.针对模式scott下之表dept进行对象审计

SQL> audit all on scott.dept by session;

Audit succeeded

翻开其审计信息:

USERID           USERHOST                   TERMINAL            ACTION# NAME         SQLTEXT                            SQLBIND  OBJ$CREATOR  OBJ$NAME   A.NTIMESTAMP#+8/24
---------------- -------------------------- ---------------- ---------- -----------  ---------------------------------- -------- ------------ ---------- ------------------
LIJIAMAN         WORKGROUP\DESKTOP-TKAPD8E  DESKTOP-TKAPD8E         103 SESSION REC    select * from scott.dept                  SCOTT        DEPT       2017/4/15 20:13:47
LIJIAMAN         WORKGROUP\DESKTOP-TKAPD8E  DESKTOP-TKAPD8E         103 SESSION REC    audit all on scott.dept by session        SCOTT        DEPT       2017/4/15 20:13:19

 

4.4 网络审计

网络审计对协议错误以及网络层内部错误进行审计,网络ACCESS审计捕获客户端与服务器通信过程遭到发生的错误,这些错由SQL*NET网络服务抛来。网络审计的语法为:

AUDIT NETWORK 
[BY SESSION | ACCESS]
[WHENEVER [NOT] SUCCESSFUL]

 

生一样篇介绍如何去清理Audit数据。

相关文章