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

时间:2020-03-05 18:54:41  来源:igfitidea点击:

我需要审核所有数据库活动,而不管它是来自应用程序还是通过其他方式发布了一些sql。因此,审核必须在数据库级别进行。有问题的数据库是Oracle。我考虑了通过触发器以及Oracle提供的称为"细粒度审核"的方法来进行此操作。在这两种情况下,我们都对特定的表和特定的列进行审核。但是,我们发现使用这些方法中的任何一种时,性能确实很糟糕。

由于围绕数据隐私的法规是绝对必须进行审核,因此我想知道什么是在不显着降低性能的情况下执行此操作的最佳方法。如果有人对此具有特定于Oracle的经验,那将有所帮助,但如果不是只有围绕数据库活动审核的常规实践也可以的话。

解决方案

回答

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

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

我使用了PostgreSQL,并对流量进行解码并将其转换为

可以记录的数据库操作流相对
直截了当。我想它可以在任何数据库中工作
格式已记录。

要点是,它不会对数据库本身造成任何额外的负担。

回答

另外,它是被动监视,它记录了所有活动,但是
无法阻止任何操作,因此可能与我们要查找的不完全相同。

  • 设置数据库参数AUDIT_TRAIL = DB。
  • 启动实例。
  • 使用SQLPlus登录。
  • 输入对帐单
audit all;

这将打开许多关键DDL操作的审核,但是DML和某些其他DDL语句仍未审核。

  • 要启用对其他活动的审核,请尝试以下语句:
audit alter table; -- DDL audit
audit select table, update table, insert table, delete table; -- DML audit

无需"自己动手"。只需打开审核:

注意:所有"作为sysdba"活动都必须经过O / S审核。在Windows中,这表示Windows事件日志。在UNIX中,通常为$ ORACLE_HOME / rdbms / audit。

请查阅《数据库SQL参考》中的" Oracle 10g R2审计"一章。

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

应该指出的是,内部Oracle审计从定义上说将是高性能的。它的设计恰恰是这样,很难想象有任何其他性能可以与之抗衡。另外,对Oracle审计也有高度的"细粒度"控制。我们可以根据需要获得精确的结果。最后,可以将SYS.AUD $表及其索引移动到单独的表空间中,以防止填满SYSTEM表空间。

回答

亲切的问候,
作品

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

Golden Gate会针对我们感兴趣的表列表抓取事务的重做日志。这些更改将写入"跟踪文件",并且可以应用于同一数据库上的其他模式,也可以交付给目标系统并应用那里(减少源系统负载的理想选择)。

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

1)设置INSERTALLRECORDS复制参数,以便对源表进行的每个更改操作在目标表中插入一条新记录。请注意,这可能会占用很多空间,但是如果我们需要全面的审核,则可能需要这样做。

2)如果我们尚未在记录中添加CHANGED_BY_USERID和CHANGED_DATE,则可以使用目标端的Golden Gate函数获取当前交易的此信息。请查看《 GG参考指南》中的以下功能:
GGHEADER(" USERID")
GGHEADER(" TIMESTAMP")

段落数量不匹配