如何在没有性能和可伸缩性问题的情况下审核数据库活

时间:2008-09-15 22:15:59

标签: database performance oracle audit

我需要审核所有数据库活动,无论它来自应用程序还是通过其他方式发布某些sql的人。因此审计必须在数据库级别完成。有问题的数据库是Oracle。我通过触发器以及Oracle提供的称为细粒度审计的方式查看了这一点。在这两种情况下,我们都启用了对特定表和特定列的审核。但是,我们发现当我们使用这些方法时,性能确实很糟糕。

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

4 个答案:

答案 0 :(得分:1)

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

将应用程序和数据库之间的原始数据发送给另一个 机器并在那里解码和分析。

我使用PostgreSQL,解码流量并将其转换为 可以记录的数据库操作流是相对的 直截了当。我想它可以在数据包所在的任何数据库上运行 格式记录在案。

重点是它不会给数据库本身带来额外的负担。

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

答案 1 :(得分:1)

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

  1. 设置数据库参数AUDIT_TRAIL = DB。
  2. 启动实例。
  3. 使用SQLPlus登录。
  4. 输入语句
    audit all;
    这将启用许多关键DDL操作的审核,但仍未审核DML和其他一些DDL语句。
  5. 要启用对这些其他活动的审核,请尝试以下语句:
    audit alter table; -- DDL audit
    audit select table, update table, insert table, delete table; -- DML audit
  6. 注意:所有“as sysdba”活动始终都会审核到操作系统。在Windows中,这意味着Windows事件日志。在UNIX中,这通常是$ ORACLE_HOME / rdbms / audit。

    查看数据库SQL参考的Oracle 10g R2 Audit Chapter

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

    应该指出,根据定义,内部Oracle审计将是高性能的。它的设计正是如此,很难想象其他任何可以与性能相媲美的东西。此外,还有对Oracle审计的高度“细粒度”控制。您可以根据需要获得它。最后,可以将SYS.AUD $表及其索引移动到单独的表空间,以防止填充SYSTEM表空间。

    亲切的问候, OPUS

答案 2 :(得分:1)

如果要在目标系统上记录已更改记录的副本,可以使用Golden Gate Software执行此操作,而不会导致源端资源消耗。此外,您无需对源数据库进行任何更改即可实现此解决方案。

Golden Gate会在重做日志中搜索涉及您感兴趣的表列表的事务。这些更改将写入“跟踪文件”,并可应用于同一数据库中的其他模式,或者发送到目标系统并在那里应用(非常适合减少源系统的负载)。

一旦您将跟踪文件发送到目标系统,就会有一些配置调整,您可以设置执行审核的选项,如果需要,您可以调用2个Golden Gate功能来获取有关交易的信息:

1)设置INSERTALLRECORDS复制参数,以便在目标表中为源表的每个更改操作插入新记录。要注意这会占用很多空间,但如果你需要全面的审核,这可能是预期的。

2)如果您的记录中还没有附加CHANGED_BY_USERID和CHANGED_DATE,则可以使用目标端的Golden Gate功能获取当前事务的此信息。查看GG参考指南中的以下功能: GGHEADER( “USERID”) GGHEADER( “时间戳”)

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

答案 3 :(得分:0)

如果您正在使用oracle,那么就会有一个名为CDC(捕获数据更改)的功能,这是一种更具性能效率的审计类型的解决方案。