如何在没有性能和可扩展性问题的情况下审核数据库活动?

Posted

技术标签:

【中文标题】如何在没有性能和可扩展性问题的情况下审核数据库活动?【英文标题】:How to Audit Database Activity without Performance and Scalability Issues? 【发布时间】:2010-09-09 05:09:09 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

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

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

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

主要的一点是它没有给数据库本身增加额外的负载。

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

【讨论】:

【参考方案2】:

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

    设置数据库参数AUDIT_TRAIL = DB。 启动实例。 使用 SQLPlus 登录。 输入语句
    audit all;
    这会打开对许多关键 DDL 操作的审计,但 DML 和其他一些 DDL 语句仍未被审计。 要对这些其他活动启用审计,请尝试以下语句:
    audit alter table; -- DDL 审计
    审计选择表、更新表、插入表、删除表; -- DML 审计

注意:所有“as sysdba”活动始终由操作系统审核。在 Windows 中,这意味着 Windows 事件日志。在 UNIX 中,这通常是 $ORACLE_HOME/rdbms/audit。

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

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

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

亲切的问候, 作品

【讨论】:

【参考方案3】:

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

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

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

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

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

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

【讨论】:

【参考方案4】:

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

【讨论】:

以上是关于如何在没有性能和可扩展性问题的情况下审核数据库活动?的主要内容,如果未能解决你的问题,请参考以下文章

我们如何在没有 MYSQL 负载的情况下创建 XML?

如何在没有活动旋转的情况下旋转活动内的片段?

如何在后台没有任何活动的情况下弹出警报消息?

如何在没有用户身份验证的情况下列出 Google 日历活动

如何在没有 JavaScript 的情况下设计可扩展的 HTML 表单?

如何知道一项活动是不是在没有过渡的情况下开始?