6

我需要审核所有数据库活动,无论它来自应用程序还是通过其他方式发出某些 sql 的人。所以审计必须在数据库级别进行。有问题的数据库是Oracle。我考虑通过触发器以及 Oracle 提供的称为细粒度审计的东西来实现它。在这两种情况下,我们都打开了对特定表和特定列的审计。然而,我们发现当我们使用这两种方法时,性能真的很糟糕。

由于围绕数据隐私的规定,审计是绝对必须的,我想知道在不显着性能下降的情况下,最好的方法是什么。如果有人在这方面有 Oracle 的特定经验,那将会很有帮助,但如果不仅仅是围绕数据库活动审计的一般实践也可以。

4

4 回答 4

2

我不确定这对于生产系统是否足够成熟,但我在使用网络流量嗅探器监控数据库流量方面取得了很大成功。

将应用程序和数据库之间的原始数据发送到另一台机器并在那里对其进行解码和分析。

我使用 PostgreSQL,解码流量并将其转换为可以记录的数据库操作流相对简单。我想它可以在任何记录了数据包格式的数据库上工作。

要点是它没有给数据库本身带来额外的负担。

此外,它是被动监控,它记录了所有活动,但无法阻止任何操作,因此可能不是您想要的。

于 2008-09-15T22:28:57.697 回答
1

没有必要“自己动手”。只需打开审核:

  1. 设置数据库参数 AUDIT_TRAIL = DB。
  2. 启动实例。
  3. 使用 SQLPlus 登录。
  4. 输入语句
    全部审核;
    这将为许多关键的 DDL 操作启用审计,但 DML 和其他一些 DDL 语句仍未审计。
  5. 要启用对这些其他活动的审核,请尝试以下语句:
    审计变更表;-- DDL 审计
    审计选择表、更新表、插入表、删除表;-- DML 审计

注意:所有“as sysdba”活动总是被 O/S 审计。在 Windows 中,这意味着 Windows 事件日志。在 UNIX 中,这通常是 $ORACLE_HOME/rdbms/audit。

查看数据库 SQL 参考的Oracle 10g R2 审计章节

可以在 SYS.DBA_AUDIT_TRAIL 视图中查看数据库审计跟踪。

需要指出的是,Oracle 内部审计从定义上讲是高性能的。它的设计正是如此,很难想象还有什么可以与它相媲美的性能。此外,Oracle 审计具有高度“细粒度”的控制。你可以得到你想要的一样精确。最后,可以将 SYS.AUD$ 表及其索引移至单独的表空间,以防止填满 SYSTEM 表空间。

亲切的问候,作品

于 2010-04-10T06:46:44.610 回答
1

如果您想在目标系统上记录更改记录的副本,您可以使用 Golden Gate Software 执行此操作,并且不会在源端资源消耗方面产生太多影响。此外,您无需对源数据库进行任何更改即可实施此解决方案。

Golden Gate 为引用您感兴趣的表列表的事务抓取重做日志。这些更改被写入“跟踪文件”,并且可以应用于同一数据库上的不同模式,或发送到目标系统并应用那里(非常适合减少源系统上的负载)。

将跟踪文件获取到目标系统后,您可以进行一些配置调整,您可以设置一个选项来执行审计,如果需要,您可以调用 2 个 Golden Gate 函数来获取有关交易的信息:

1) 设置 INSERTALLRECORDS Replication 参数,为对源表进行的每个更改操作在目标表中插入一条新记录。请注意,这会占用大量空间,但如果您需要全面审计,这可能是意料之中的。

2) 如果您的记录中还没有 CHANGED_BY_USERID 和 CHANGED_DATE,您可以使用目标端的 Golden Gate 函数来获取当前交易的此信息。查看 GG 参考指南中的以下函数: GGHEADER("USERID") GGHEADER("TIMESTAMP")

所以不,它不是免费的(需要通过 Oracle 获得许可),并且需要一些努力才能启动,但可能比实施和维护自己滚动的自定义解决方案要少得多的努力/成本,并且您还可以获得传送数据的额外好处到远程系统,这样您就可以保证对源数据库的影响最小。

于 2010-04-12T15:28:08.883 回答
0

如果您使用的是 oracle,那么有一个称为 CDC(捕获数据更改)的功能,它是针对审计类型需求的更高效的解决方案。

于 2011-03-29T05:48:07.563 回答