DBMS_AUDIT_MGMT的一些小结

当设置了DBMS_AUDIT_MGMT.init_cleanup之后,aud$的相关行为会发生一些变化。如原来设置了by session的审计,在进行初始化后,by session的记录变得像by access一样,或者更准确的说,变得像11g的行为一样。(详见下面的Q5)

在11g之前,by session的审计是每个session,如果多个操作,则只是在一条记录中更新ses_action的记录,如果操作都是同一个操作,如都是insert,那么则在aud$表中只有一条记录。而by access的审计,则是每个dml操作都会写一行的记录。

在11g之后,by session的审计已经过期(Doc ID 1171314.1),11g中只能采用by access方式的审计,这种方式只能向前不能后退到11g之前的行为,且没有开关,没隐含参数可以控制。但是oracle提供了一个FGA的脚本,来实现类似by session的审计功能: How To Implement The Equivalent Of BY SESSION Auditing Using FGA on Objects? (Doc ID 1269970.1)

DBMS_AUDIT_MGMT这个包,最初看的信息是11g审计加强相关的文档中看到的。下面是我总结的一些和该包相关的FAQ:

Q1:移动aud$的表空间是否一定需要init_cleanup?

A1:在10g中,需要init_cleanup。在11g中,不需要init_cleanup。因为在11g中oracle对审计表的行为已经变成insert,故不需init_cleanup可以直接DBMS_AUDIT_MGMT.set_audit_trail_location。


Q2:rename了aud$表,当被审计的用户登录或dml操作时,会发生什么情况?

A2:登录时报错:

查询DBA_AUDIT_TRAIL时报错:


Q3:如果运行deinit_cleanup 后,aud$表的行为回复和原来一样,不再是一条dml一条记录,那么原来设置的清理的任务还能跑吗?

A3:不能,原来的清理任务会fail,直接跑清理的过程,也会报错Cleanup not initialized 。


Q4:用deinit_cleanup 恢复后,索引与之前有什么不同?

A4:deinit_cleanup ,会恢复在init_cleanup时被删除的索引I_AUD1 。


Q5:为什么init_cleanup会导致aud$表的行为发生变化?

A5:DBMS_AUDIT_MGMT来管理审计记录,这个功能是11gR2的审计的增强,在11g之前的版本是不存在的,除非打了10.2.0.5或11.1.0.7的patch set,或者某些patch,才能有这个功能。因此,该包可能和11g之前的配合没有那么好。
New Feature DBMS_AUDIT_MGMT To Manage And Purge Audit Information (Doc ID 731908.1)

而DBMS_AUDIT_MGMT.init_cleanup,则会将aud$表的行为变成和11g一样,即每条dml记录都insert到aud$表中,而不是同一个session的同一类dml操作更新一个ses_action标记。
10g: Database user logon/logoff is slow with auditing enabled (AUDIT_TRAIL = DB) (Doc ID 1509729.1)

另外,我们也能发现在10.2.0.3~11.1.0.7,该包还是有不少的known issue。所以说和11gR2之前的版本配合可能没那么理想。
Known Issues When Using: DBMS_AUDIT_MGMT (Doc ID 804624.1)

相关文章

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据