阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Oracle Audit 审计功能的认识与使用

204次阅读
没有评论

共计 16352 个字符,预计需要花费 41 分钟才能阅读完成。

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#+8/24
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]

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

更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2017-10/147360p2.htm

在上一篇,初步了解了 Audit 的作用以及如何使用 Audit,本篇记录如何手动清理 Audit 数据。

(一)概述

Audit 的数据主要存储在 sys.aud$ 表中,该表默认位于 system 表空间中,我们根据需求,将该表移到了 sysaux 表空间中。由于审计数据量较大,需要经常关注 sysaux 表空间的使用情况, 同时根据实际情况对 sys.aud$ 表进行数据清理。

(二)清理步骤

(1)使用 sys 账号登陆数据库,打开计时功能,方便查看每一个命令的执行时间

SQL> set timing on

(2)在清理数据之前先查看数据量大小

SQL> select count(*) from sys.aud$;

(3)查看 Audit 表中最早一笔数据的时间, 即审计表中记录的最早的时间

SQL> select min(ntimestamp#) from sys.aud$;
MIN(NTIMESTAMP#)
----------------------------------------
23-11 月-16 08.18.54.496893 上午

(4)查看审计数据最后归档时间,只有归档的数据才能删除

SQL> SELECT * FROM dba_audit_mgmt_last_arch_ts;
AUDIT_TRAIL   RAC_INSTANCE   LAST_ARCHIVE_TS
-----------   ------------   --------------------------------
STANDARD AUDIT TRAIL     0   14- 3 月 -17 01.22.49.000000 下午 +00:00

(5)初始化清理 Audit 的功能,该命令 只有在第一次执行时需要运行,default_cleanup_interval =>168 代表清理周期为 168 小时。

 
SQL> 
BEGIN
      sys.DBMS_AUDIT_MGMT.init_cleanup(audit_trail_type         => sys.DBMS_AUDIT_MGMT.AUDIT_TRAIL_ALL,
      default_cleanup_interval => 168);
END;
/

(6)确认清除 Audit 功能是否开启,yes 为开启

SQL>
SET SERVEROUTPUT ON
BEGIN
IF sys.DBMS_AUDIT_MGMT.is_cleanup_initialized(sys.DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD) THEN
    DBMS_OUTPUT.put_line(
YES);
 
ELSE
    DBMS_OUTPUT.put_line(
NO);
 
END IF;
 
END;
/

(7)设置需要清理的天数,最后一个数字‘7’代表清理‘7’天前的数据(归档时间大于等于清除时间)

SQL>
BEGIN
      sys.DBMS_AUDIT_MGMT.set_last_archive_timestamp(
      audit_trail_type 
=> sys.DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD,
      last_archive_time
=> SYSTIMESTAMP7 /* Day*/);
END;
/

(8) 执行清除,时间长短受数据量大小影响(经测试 600 万条数据大约 20 分钟)

SQL>
BEGIN
      sys.DBMS_AUDIT_MGMT.clean_audit_trail(
      audit_trail_type       
=> sys.DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD,
      use_last_arch_timestamp
=> TRUE);
END;
/

(9)在清理后,sys.aud$ 表的大小并没有发生改变,需要收回空间

解释:在上面清理表 sys.aud$ 后,实际上,数据还在磁盘上,只是数据不受保护了而已,其空间并没有释放,需要将其释放回收

 
SQL> select segment_name,bytes/1024/1024 from dba_segments where segment_name='AUD$'; --查看 aud$ 的大小
SEGMENT_NAME                                                                     BYTES/1024/1024
-------------------------------------------------------------------------------- ---------------
AUD$                                                                                        3456

SQL> alter table sys.aud$ enable row movement;   --激活行移动
Table altered.

SQL> SQL> alter table sys.aud$ shrink space cascade;  --进行空间回收
Table altered.

SQL> alter table sys.aud$ disable row movement;  --关闭行移动
Table altered.

SQL> select segment_name,bytes/1024/1024 from dba_segments where segment_name='AUD$';  ---- 再次查看 aud$ 的大小

SEGMENT_NAME                                                                     BYTES/1024/1024
-------------------------------------------------------------------------------- ---------------
AUD$                                                                                    666.8125

经过 2 次查看空间大小,可以看到空间已经被释放。

更多 Oracle 相关信息见Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-10/147360.htm

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#+8/24
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]

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

更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2017-10/147360p2.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计16352字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中