当设置了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:登录时报错:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
C:\Users\jijihe>sqlplus test/test SQL*Plus: Release 10.2.0.5.0 - Production on Sat Nov 16 13:55:41 2013 Copyright (c) 1982, 2010, Oracle. All Rights Reserved. ERROR: ORA-00604: 递归 SQL 级别 1 出现错误 ORA-00942: 表或视图不存在 ORA-02002: 写入审计线索时出错 ORA-00604: 递归 SQL 级别 1 出现错误 ORA-00942: 表或视图不存在 Enter user-name: |
查询DBA_AUDIT_TRAIL时报错:
1 2 |
ERROR at line 1: ORA-04063: view "SYS.DBA_AUDIT_TRAIL" has errors |
Q3:如果运行deinit_cleanup 后,aud$表的行为回复和原来一样,不再是一条dml一条记录,那么原来设置的清理的任务还能跑吗?
A3:不能,原来的清理任务会fail,直接跑清理的过程,也会报错Cleanup not initialized 。
1 2 3 4 5 6 7 8 |
sys@ORA10G(192.168.1.100)> select status from dba_scheduler_job_log where owner='SYS' and job_name like 'PURGE%'; STATUS ------------------------------------------------------------ SUCCEEDED SUCCEEDED SUCCEEDED FAILED |
1 2 3 4 5 6 7 |
BEGIN DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL(3, TRUE); END; * ERROR at line 1: ORA-46258: Cleanup not initialized for the audit trail ORA-06512: at "SYS.DBMS_AUDIT_MGMT", line 56 ORA-06512: at "SYS.DBMS_AUDIT_MGMT", line 2112 ORA-06512: at line 1 |
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)
1 2 |
The DBMS_AUDIT_MGMT package is installed by default in Oracle 11.2, and in patchsets 10.2.0.5 and 11.1.0.7 but has also been made available as a separately installable patch for other versions. |
而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)
1 2 3 4 5 |
Important: This only applies to database versions through 10gR2 that have NOT run DBMS_AUDIT_MGMT.INIT_CLEANUP. Doing so intentionally drops I_AUD1, as it also changes auditing behavior such that AUD$ no longer needs to be updated, only appended to. See Note 804624.1. 即:I_AUD1为unusable状态,仅发生在10gR2版本没有运行DBMS_AUDIT_MGMT.INIT_CLEANUP的时候。 一旦我们运行了DBMS_AUDIT_MGMT.INIT_CLEANUP,该包会drop I_AUD1索引,并且改变aud$的行为,使得该表不再被update,而仅仅是append追加。即一个dml行为一条记录,和11g一样的行为。 |
另外,我们也能发现在10.2.0.3~11.1.0.7,该包还是有不少的known issue。所以说和11gR2之前的版本配合可能没那么理想。
见Known Issues When Using: DBMS_AUDIT_MGMT (Doc ID 804624.1)