5、Oracle数据库审计
1、审计(Audit):
对用户所执行的数据库活动的跟踪记录,便于事后监督、检查。
审计信息存放位置:
审计记录信息,存储在system表空间中的SYS.AUD$数据字典表;
或操作系统默认位置$ORACLE_BASE/admin/$ORACLE_SID/adump/;
Oracle 11G以后,数据库默认是开启审计功能的,因此有时候我们忘记了关闭该功能导致SYSTEM表空间暴满,但由于关闭审计功能需要重启数据库,此类操作生产环境下是不允许的,因此我们需要找出哪类审计产生的较多,然后单独的进行关闭;我们可以通过如下方法查找:如果你发现AUD$这个表比较大了,检查下是哪种审计占的空间:
SQL> select action_name,count(*) from dba_audit_trail group by action_name;
--一般是LOGON和LOGOFF类型的审计最多。取消此类审计:
SQL> noaudit session whenever successful;
--一般来说,如果空间不是占的特别多,此类审计还是保留为好。可以取消对一些登录特别频繁的用户的审计,比如DBSNMP用户:
SQL> noaudit session by U007;
--关闭审计后,对表sys.aud$进行清理
select * from sys.aud$;
truncate table selsys.aud$;
审计参数AUDIT_TRAIL
参数值取值列表:
(1).DB/TRUE ---- 启用审计,并且把审计结果存放在数据库的SYS.AUD$表中
(2).OS ---- 启用审计,并把审计结果存放在操作系统的审计信息中
(3).DB_EXTENDED ---- 启用审计,把审计结果存放在数据库SYS.AUD$表中,并在CLOB列的SQLBIND和SQLTEXT字段记录额外的信息;
(4).XML ---- 启用审计,以XML格式写所有审计记录;
(5).EXTENDED ---- 启用审计,在审计跟踪中记录所有列,包括SQLTEXT和SQLBIND值
(6).NONE/FALSE ---- 禁用审计
以下步骤设置Oracle的审计功能:
(1).修改审计参数AUDIT_TRAIL:
Alter system set AUDIT_TRAIL=DB scope=spfile;
(2).初始化数据库审计功能:
以connect /as sysdba执行脚本cataudit.sql,脚本位置D:\app\Administrator\product\11.2.0\dbhome_1\RDBMS\ADMIN;
(3).重启数据库:
由于参数AUDIT_TRAIL不是动态的,需要关闭数据库重启生效。
2、审计分类和用法:
语句审计:
--语法
AUDIT sql_statement_clause [BY user_name] | [BY [SESSION | ACCESS]
WHENEVER [NOT] SUCCESSFUL]
参数说明:
sql_statement_clause ---- SQL语句或选项;
BY ACCESS ---- 存取方式,每条语句被执行一次都要审计,不管语句是否相同;
BY SESSION ---- 会话方式,相同的语句只被审计一次,这也是系统默认方式;
WHENEVER SUCCESSFUL ---- 表示只对成功语句进行审计;
WHENEVER NOT SUCCESSFUL ---- 表示只对不成功语句进行审计。
--举例:
--(1).审计用户对对象的操作:
Audit table by scott;
--(2).审计用户执行的SQL语句:
Audit create table by scott;
Audit insert table by u0007; ---- 审计insert into表或视图;
Audit delete table by u0007; ---- 审计删除表或视图中的行;
--(3).指定审计方式:
Audit delete table by u0007 by access; ---- 存取方式,每条语句执行一次都要审计;
--(4).审计成功与不成功的会话:
Audit session by u007 whenever not successful; ---- 只对不成功语句进行审计;
--(5).了解哪些用户进行了审计,可查询数据字典视图DBA_STMT_AUDIT_OPTS
select * from dba_stmt_audit_opts where user_name='U007';
--(6).停止语句审计:
Noaudit alter table by U007;
权限审计:
--语法:
AUDIT privilege [BY user_name] | [BY [SESSION | ACCESS]
WHENEVER [NOT] SUCCESSFUL]
对象审计:
--语法:
AUDIT schema_object_clause ON schema
[BY user_name] | [BY [SESSION | ACCESS]
WHENEVER [NOT] SUCCESSFUL]
Audit select,insert,delete on scott.dept by access;
3、细粒度审计(FGA)
是由DBMS_FGA的PL/SQL程序实现的