环境:windows server 2008、Oracle 12c R2
下面的步骤,连接为sysdba,除非指定了其它方式。
(1)运行如下查询,确定统一审核是否启用了:
select value from v$option where parameter='Unified Auditing';
在标准安装中,这会返回FALSE。如果返回的是TRUE,表示已经启用了统一审核,则跳到步骤(5)。
(2)关闭Oracle服务。
关闭所有数据库实例和侦听器。在Windows上,也停止所有与Oracle相关的Windows服务。
(3)启用统一审核。
windows上,是复制统一审核动态链接库:
cd %ORACLE_HOME%\bin
copy orauniaud12.dll.dbl orauniaud12.dll
或者直接到%ORACLE_HOME%\bin目录下,手动复制orauniaud12.dll.dbl为orauniaud12.dll
(4)确认统一审核现在已启用。
启动实例和侦听器(在Windows上,启动相关的服务),重新运行步骤(1)中的查询语句,看是否返回TRUE。
(5)创建并启用自己的策略。
create audit policy aud_dba_role roles dba; --创建角色策略
audit policy aud_dba_role by system; --把角色策略赋予system
select policy_name,enabled_opt,user_name from audit_unified_enabled_policies; ---确认已经配置了策略,查询已生效的统一审核策略
(6)测试策略
连接为system用户,执行几个操作。
create user x identified by y; ---创建用户,在12c中,名字前面要加前缀c##,不过可以在pdb中建用户,不用带c##
alter user c##test identified by test;---修改用户密码(12c cdb$root中用户)
alter system set open_cursors=300 scope=memory; ---修改实例参数,仅在内存中生效
exec dbms_audit_mgmt.flush_unified_audit_trail; ---把当前缓存到SGA中的所有记录转存到数据库的审核记录中。
select dbusername,sql_text,audit_type,action_name,object_name,unified_audit_policies from unified_audit_trail; ---查询审核记录
如果有记录,
(7)
连接为sysdba,找到审核记录表。
select table_name from dba_tables where owner='AUDSYS';
上述语句的查询结果为aud$unified,继而查询记录表中的数据
select audit_type,sql_text,event_timestamp,unified_audit_policies from audsys.aud$unified;
默认情况下,不能对表audsys.aud$unified执行DML和DDL操作。即执行语句:delete from audsys.aud$unified会报错。
但是可以通过对unified_audit_trail来操作,删除了unified_audit_trail中的记录之后,,audsys.aud$unified中的记录也被清除了。
(8)清除审核记录
select count(*) from unified_audit_trail;--查询现有审核记录数
execute dbms_audit_mgmt.clean_audit_trail(dbms_audit_mgmt.audit_trail_all,false);--通过dbms_audit_mgmt来管理unified_audit_trail中的审核记录
select count(*) from unified_audit_trail;--再次查询记录,发现只有一行,这一行是刚才清楚数据的那条动作记录。
select count(*) from audsys.aud$unified;--查询也只有一行。