暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle Audit 审计- Audit说明

起鼓隆冬强 2024-11-08
90

2.1 审计

审计(Audit)用于监视用户所执行的数据库操作,审计记录可存在数据字典表(称为审计记录:存储在system表空间中的 SYS.AUD$表中,可通过视图dba_audit_trail查看)或操作系统审计记录中(默认位置为$ORACLE_BASE/admin/$ORACLE_SID/adump/).。默认情况下审计是没有开启的。

当数据库的审计是使能的,在语句执行阶段产生审计记录。审计记录包含有审计的操作、用户执行的操作、操作的日期和时间等信息。

不管你是否打开数据库的审计功能,以下这些操作系统会强制记录:用管理员权限连接Instance;启动数据库;关闭数据库。

2.1.1 Oracle审计功能

审计是对选定的用户动作的监控和记录,通常用于:

审查可疑的活动。例如:数据被非授权用户所删除,此时安全管理员可决定对该数据库的所有连接进行审计,以及对数据库的所有表的成功地或不成功地删除进行审计。

监视和收集关于指定数据库活动的数据。例如:DBA可收集哪些被修改、执行了多少次逻辑的I/O等统计数据。

2.1.2 ORACLE所允许的审计选择限于下列方面

审计语句的成功执行、不成功执行,或者其两者。对每一用户会话审计语句执行一次或者对语句每次执行审计一次。 对全部用户或指定用户的活动的审计。

2.1.3 审计相关的表安装

 SQLPLUS> connect / AS SYSDBA

SQLPLUS> select * from sys.aud$;     --没有记录返回

SQLPLUS> select * from dba_audit_trail;   - 没有记录返回

如果做上述查询的时候发现表不存在,说明审计相关的表还没有安装,需要安装。

SQLPLUS> connect / as sysdba

SQLPLUS> @$ORACLE_HOME/rdbms/admin/cataudit.sql

审计表安装在SYSTEM表空间。所以要确保SYSTEM表空间又足够的空间存放审计信息。安装后要重启数据库

2.1.4 将审计相关的表移动到其他表空间

由于AUD$表等审计相关的表存放在SYSTEM表空间,因此为了不影响系统的性能,保护SYSTEM表空间,最好把AUD$移动到其他的表空间上。可以使用下面的语句来进行移动:

sql>connect / as sysdba;

sql>alter table aud$ move tablespace<new tablespace>;

sql>alter index I_aud1 rebuild onlinetablespace <new tablespace>;

SQL> alter table audit$ move tablespace<new tablespace>;

SQL> alter index i_audit rebuild onlinetablespace <new tablespace>;

SQL> alter table audit_actions movetablespace <new tablespace>;

SQL> alter index i_audit_actions rebuildonline tablespace <new tablespace>;

2.1.5 truncate 或者 delete sys.aud$ 表

在delete 之前,可以先把aud$表exp备份一下,注意,不要直接exp,先创建一张临时表,然后将临时表exp。

   sql>create table audit_record tablespace users as select * from sys.aud$;

然后exp:

   exp tables=AUDIT_RECORD file=audit_record.dmp

最后delete 数据:

sql>delete from sys.aud$;

或者删除指定表的审计:

sql>delete from sys.aud$ where obj$name='&table_nmae';

注意,delete 不会释放system表空间。 可以使用truncate table:

sql>truncate table sys.aud$

2.2 和审计相关的两个主要参数

2.2.1 Audit_sys_operations

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

 SYS@dave2(db2)> show parameteraudit_file_dest

NAME                     TYPE       VALUE

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

audit_file_dest       string     /u01/app/oracle/admin/dave2/adump

2.2.2 Audit_trail

参数audit_trail的值:
db/true : 启用审计,并且把审计结果放到数据库的sys.aud$表中
os: 启用审计,并且把审计结果存放在操作系统的数据信息中
db_extended: 启用审计,把审计结果存放在数据库的sys.aud$表中,并且在clob列的sqlbind和sqltext字段记录额外的信息
xml: 启用审计,以xml格式写所有的审计记录
extended: 启用审计,在审计跟踪中记录所有列,包括sqltext和sqlbing值
none/false:禁用审计

注:这两个参数是static参数,需要重新启动数据库才能生效。

 

2.3审计级别

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

2.3.1 Statement

语句审计,对某种类型的SQL语句审计,不指定结构或对象。比如audit table 会审计数据库中所有的create table,droptable,truncate table语句,alter session by cmy会审计cmy用户所有的数据库连接。

2.3.2 Privilege

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

2.3.3 Object

对象审计,对一特殊模式对象上的指定语句的审计. 如审计on关键字指定对象的相关操作,如aduit alter,delete,drop,insert on cmy.t by scott; 这里会对cmy用户的t表进行审计,但同时使用了by子句,所以只会对scott用户发起的操作进行审计。

    注意:Oracle没有提供对schema中所有对象的审计功能,只能一个一个对象审计,对于后面创建的对象,Oracle则提供on default子句来实现自动审计,比如执行audit drop on defaultby access;后,对于随后创建的对象的drop操作都会审计。但这个default会对之后创建的所有数据库对象有效,似乎没办法指定只对某个用户创建的对象有效,想比 trigger可以对schema的DDL进行“审计”,这个功能稍显不足。

2.4审计的一些其他选项

2.4.1 by access / by session

by access 每一个被审计的操作都会生成一条audit trail。

by session 一个会话里面同类型的操作只会生成一条audit trail,默认为by session。

2.4.2 whenever [not] successful

whenever successful 操作成功(dba_audit_trail中returncode字段为0) 才审计,

whenever not successful 反之。省略该子句的话,不管操作成功与否都会审计。

2.5 和审计相关的视图

2.5.1 dba_audit_trail

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

2.5.2 dba_stmt_audit_opts

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

2.5.3 all_def_audit_opts

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

2.6取消审计

将对应审计语句的audit改为noaudit即可,

如audit sessionwhenever successful

对应的取消审计语句为noaudit session whenever successful;

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论