Oracle审计审计分为用户级审计和系统级审计。用户级审计是任何Oracle用户可设置的审计,主要是用户针对自己创建的数据库表或视图进行审计,记录所有用户对这些表或视图的一切成功和(或)不成功的访问要求以及各种类型的SQL操作。系统级审计只能由DBA设置,用以监测成功或失败的登录要求、监测GRANT和REVOKE操作以及其他数据库级权限下的操作。
ORACLE中分别支持以下三种标准审计类型:
?????????? 语句审计,对某种类型的SQL语句审计,不指定结构或对象。
?????????? 特权审计,对执行相应动作的系统特权的使用审计。
?????????? 对象审计,对一特殊模式对象上的指定语句的审计。
?????????? 审计语句的成功执行、不成功执行,或者其两者。
?????????? 对每一用户会话审计语句执行一次或者对语句每次执行审计一次。
?????????? 对全部用户或指定用户的活动的审计。SYS模式的AUD$表中。
2.2 和审计相关的两个主要参数
Audit_sys_operations:
默认为false,当设置为true时,所有sys用户(包括以sysdba,sysoper身份登录的用户)的操作都会被记录,audit trail不会写在aud$表中,这个很好理解,假如数据库还未启动aud$不可用,那么像conn /as sysdba这样的连接信息,只能记录在其它地方。假如是windows平台,audti trail会记录在windows的事件管理中,假如是linux/unix平台则会记录在audit_file_dest参数指定的文件中。
Audit_trail:
None:是默认值,不做审计;
DB:将audit trail 记录在数据库的审计相关表中,如aud$,审计的结果只有连接信息;
DB,Extended:与DB一样,但是审计结果里面除了连接信息还包含了当时执行的SQL_TEXT和SQL_BIND
OS:将audit trail 记录在操作系统文件中,文件名由audit_file_dest参数指定;
XML:10g里新增,将audit trail以XML格式记录在操作系统文件中;
XML,Extended:与XML一样,但是审计结果里面除了连接信息还包含了当时执行的SQL_TEXT和SQL_BIND
static参数,需要重新启动数据库才能生效。
2.3 审计级别
当开启审计功能后,可在三个级别对数据库进行审计:Statement(语句)、Privilege(权限)、object(对象)。
Statement:
按语句来审计,比如audit table 会审计数据库中所有的create table,drop table,truncate table语句,alter session by cmy会审计cmy用户所有的数据库连接。
用法AUDIT sql_statement_clause BY {SESSION | ACCESS} WHENEVER [NOT] SUCCESSFUL;
表1列出了可以审计的语句类型,并且在每个类别中包含了相关语句的简要描述。如果指定all,则审计该列表中的任何语句。然而,表2中的语句类型在启用审计时不属于all类别;必须在audit命令中显式地指定它们。
表1 包括在ALL类别中的可审计语句
语 句 选 项SQL操作ALTER SYSTEM所有ALTER SYSTEM选项,例如,动态改变实例参数,切换到下一个日志文件组,以及终止用户会话CLUSTERCREATE、ALTER、DROP或TRUNCATE集群CONTEXTCREATE CONTEXT或DROP CONTEXTDATABASE LINKCREATE或DROP数据库链接DIMENSIONCREATE、ALTER或DROP维数DIRECTORYCREATE或DROP目录INDEXCREATE、ALTER或DROP索引MATERIALIZED VIEWCREATE、ALTER或DROP物化视图NOT EXISTS由于不存在的引用对象而造成的SQL语句的失败PROCEDURECREATE或DROP FUNCTION、LIBRARY、PACKAGE、PACKAGE BODY或PROCEDUREPROFILECREATE、ALTER或DROP配置文件PUBLIC DATABASE LINKCREATE或DROP公有数据库链接PUBLIC SYNONYMCREATE或DROP公有同义词ROLECREATE、ALTER、DROP或SET角色ROLLBACK SEGMENTCREATE、ALTER或DR