环境: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;--查询也只有一行。