当前位置:Gxlcms > 数据库问题 > [Oracle]Audit(一)--认识Audit

[Oracle]Audit(一)--认识Audit

时间:2021-07-01 10:21:17 帮助过:22人阅读

修改审计环境参数:

技术图片
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 = TEST02and
  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]

 

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

 

================================================================

2019年1月2日补充:

(1)如何关闭默认的login、logoff审计

 在11g默认审计中,Oracle会去审计用户的登入登出操作。如果用户登入登出操作很多,那么sys.aud$表会非常的大。我的1个生产数据库由于没有关闭对登入登出的审计,导致积累了16GB的审计数据。在一个平时不怎么使用的测试库里面,登入登出的审计信息也非常的多。

技术图片
select  a.action#,b.name,count(*) as counter
from    sys.aud$ a,
        sys.audit_actions b
where   a.action# = b.action
group by a.action#,b.name
order by counter desc
技术图片

技术图片

如何关闭呢,可以使用sql语句来关闭

[Oracle]Audit(一)--认识Audit

标签:初始   bsp   操作系统   creat   字典   授权   size   数值   格式   

人气教程排行