对于想要集中数据审计函数以创建通用审计过程的开发者,也许就该考虑使用Oracle流。我们要一个数据审计表,保存对数据库进行的所有修改。这个数据库范围的审计表可用于多进程,它会引发一些性能问题(这已超出本书范畴),但这些问题可通过调整对象存储参数来减轻。
集中式数据审计跟踪将包含一个主表和一个附表,命名为AUDIT_TRAIL_1和AUDIT_TRAIL_2。AUDIT_TRAIL_1如下:
AUDIT_TRAIL_2如下:
流使用SYS.ANYDATA类型来存储列值。(ANYDATA类型列包含了数据示例和数据类型描述。)在审计表中将使用相同的数据类型。
简单的流配置包含了两个进程:捕捉进程从重做日志中获取DML的修改,并将它们写入数据库队列。应用进程拆分修改队列,并将它们传递给DML处理过程,而这个过程由开发者自己编写。DML处理过程将把DML修改写入数据审计跟踪。
要使用流,必须满足一些先决条件。我们需要使用Oracle企业版,数据库必须运行于归档日志模式。一些初始化参数必须设置,而流管理员账户必须创建并配置。说太多步骤会脱离主题,但我们将涵盖足够多细节,以教给你在审计中使用流的方法。
通过如下PL/SQL过程调用来配置流:
DML_HANDLER是一个向表AUDIT_TRAIL插入数据的程序。它是可用于任何表的通用程序。
流捕捉进程从重做日志文件中读取所做的修改。这些修改不包含执行修改的用户名和修改的日期,但审计跟踪需要这些信息。可以用下面的方法使其对DML_HANDLER可用。
流进程可以自动地(松散地)基于事件执行程序。事件就是流捕捉进程,它能对所有记录于数据库重做日志中的DDL和DML修改起作用。创建一个好的流程序并不需很多编程。