ACCESS[Oracle]奥迪(Audi)t(一)–认识奥迪(Audi)t

1.Audit的概念

奥迪(Audi)t是监视和著录用户对数据库举行的操作,以供DBA举办问题浅析。利用奥迪(Audi)t功用,可以落成以下义务:

  • 蹲点和采访特定数据库活动的数码。例如管理员可以审计哪些表被更新,在某个时间点上有多少个相互用户计算数据;
  • 担保用户对友好的移动负责。那几个移动包涵在一定格局、特定表、特定行等目的上进展的操作;
  • 审计数据库中的思疑活动。如一个未经授权的用户正从表中删除数据,那么数据库管理员必须审计所有数据库连接,以及在数据库中所有成功和破产的去除操作。

据悉审计项目分歧,审计记录中的新闻也迥然差距。寻常,一条审计记录中隐含用户名、会话标识、终端标识、所操作的方式对象名称、执行的操作、执行的总体语句代码、日期和时间戳、所运用的系统权限。

 

2.Audit的分类

在oracle 11g中,一共有4种审计项目:

  • 话语审计(Statement
    奥迪ting):对一定的SQL语句进行审计,不点名具体对象;
  • 权限审计(Privilege 奥迪(Audi)ting):对特定的系统权限行使景况举行审计;
  • 目的审计(Object
    奥迪ting):对特定的方式对象上推行的一定语句举办审计;
  • 网络审计(Network
    奥迪ting):对网络协议错误与网络层内部错误进行审计。

除此以外,依照用户是或不是成功施行,可以分为对履行成功的讲话进行审计、对不成事的话语举行审计、无论成功与否都举行审计。

基于对同一个言语审计次数不一样,能够分为会话审计和存取审计。会话审计是指对某个用户或具备用户的一模一样语句只审计一回,形成一条审计记录;存取审计是指对某个用户或具有用户的同样语句每执行三次审计三遍,形成多条审计记录。

 

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 网络审计

网络审计对协商错误与网络层内部错误举办审计,网络审计捕获客户端与服务器通讯进程中发出的不当,这一个不当由SQL*NET网络服务抛出。网络审计的语法为:

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

 

下一篇介绍怎样去清理奥迪(Audi)t数据

相关文章