Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 如何在没有性能和可伸缩性问题的情况下审核数据库活动?_Database_Performance_Oracle_Audit - Fatal编程技术网

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

Database 如何在没有性能和可伸缩性问题的情况下审核数据库活动?,database,performance,oracle,audit,Database,Performance,Oracle,Audit,我需要审计所有数据库活动,不管它是来自应用程序还是来自通过其他方式发出sql的人。因此,审计必须在数据库级别进行。所讨论的数据库是Oracle。我研究了如何通过触发器和Oracle提供的细粒度审计来实现这一点。在这两种情况下,我们都打开了对特定表和特定列的审核。然而,我们发现当我们使用这两种方法中的任何一种时,性能都非常糟糕 由于围绕数据隐私制定的法规,审计是绝对必要的,我想知道在不显著降低性能的情况下,最好的方法是什么。如果有人在这方面有Oracle特定的经验,这将是有帮助的,但如果不仅仅是关

我需要审计所有数据库活动,不管它是来自应用程序还是来自通过其他方式发出sql的人。因此,审计必须在数据库级别进行。所讨论的数据库是Oracle。我研究了如何通过触发器和Oracle提供的细粒度审计来实现这一点。在这两种情况下,我们都打开了对特定表和特定列的审核。然而,我们发现当我们使用这两种方法中的任何一种时,性能都非常糟糕


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

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

将应用程序和数据库之间的原始数据发送到另一个应用程序 在那里对其进行加工、解码和分析

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

主要的一点是,它不会给数据库本身带来额外的负载

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

无需“自行启动”。只需打开审计:

  • 设置数据库参数AUDIT_TRAIL=DB
  • 启动实例
  • 使用SQLPlus登录
  • 进入报表审核全部;这将打开对许多关键DDL操作的审核,但DML和其他一些DDL语句仍然没有被审核
  • audit all;
  • 要对这些其他活动启用审核,请尝试以下语句:audit alter table;--DDL审计 audit alter table; -- DDL audit audit select table, update table, insert table, delete table; -- DML audit 审核选择表、更新表、插入表、删除表;——DML审计
  • 注意:所有“as sysdba”活动始终由O/S审核。在Windows中,这意味着Windows事件日志。在UNIX中,这通常是$ORACLE_HOME/rdbms/audit

    签出数据库SQL引用的

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

    应该指出的是,根据定义,Oracle内部审计将是高性能的。它就是这样设计的,很难想象在性能上还有什么能与之匹敌。此外,Oracle审计还具有高度的“细粒度”控制。你可以得到你想要的精确值。最后,可以将SYS.AUD$表及其索引移动到单独的表空间,以防止填满系统表空间

    亲切问候,,
    Opus

    如果您想在目标系统上记录更改记录的副本,您可以使用金门软件来实现这一点,并且不会造成太多源端资源流失。此外,实现此解决方案不必对源数据库进行任何更改

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

    将跟踪文件发送到目标系统后,有一些配置调整,您可以设置一个选项来执行审核,如果需要,您可以调用2个金门函数来获取有关事务的信息:

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

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


    因此,它不是免费的(需要通过Oracle获得许可),需要一些努力来加速,但可能比实施和维护自定义解决方案要省力/省钱得多,而且您还可以将数据传送到远程系统,从而保证对源数据库的影响降到最低

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