【问题标题】:Auditing SQL Server data changes审核 SQL Server 数据更改
【发布时间】:2009-04-27 14:06:29
【问题描述】:

我正在考虑更改 SQL Server 2005 数据库的审核流程,并且在 SQL Server 2008 中遇到了更改数据捕获。

这看起来是个好主意,我很想尝试一下,但在我尝试之前,有没有人在商业环境中使用过它,你的想法是什么?

我在阅读 MS 帮助中有关 CDC 的信息时注意到,它说审计数据通常会保留几天。这是不可能的,我想无限期地保留数据,有人知道这种方法有问题吗?

如果由于我不知道的原因这不是一个好的解决方案,您是否有任何其他解决方案来审计数据更改。我热衷于使用可以在我想要的任何桌子上全面实施的系统。

我追求的是基本的:“之前、之后、谁、何时”的任何更改信息。

【问题讨论】:

    标签: sql sql-server-2005 sql-server-2008


    【解决方案1】:

    在我看来,CDC 应该只是达到目的的一种手段。我过去曾实施过审计跟踪解决方案,它们涉及到触发器的使用。对于高度事务性的数据库来说,这会变得非常混乱和性能密集。

    CDC 为您提供的是无需使用触发器即可记录审计数据的能力,但您仍需要一种方法将这些数据放入永久表中。这可以通过为每个要审计的表创建一个镜像表或跟踪所有表的所有更改的单个表来完成(我已经完成了后者)。

    以下是一些链接,其中包含有关如何使用触发器完成此操作的更多信息:
    SQL Audit Trail
    sql-server-history-table-populate-through-sp-or-trigger

    这是一个使用 LINQ 的开源审计跟踪解决方案:DoddleAudit

    【讨论】:

    • 我明白了,我刚刚阅读了有关 CDC 的更多内容,了解您的意思。似乎 CDC 受益于异步。我非常喜欢您关于使用单个表来跟踪所有更改的想法,但是在我看来,使用“高度事务性数据库”,这个表可能会变得非常大,非常快。
    • 嘿,我终于有时间看看你在说什么。我想知道您如何跟踪谁对您的系统进行了更改?原则上,CDC 似乎很容易设置并提供一些不错的功能。
    • 在我的设置中,每个表都有 4 个附加列:CreatedDate、CreatedBy、UpdatedDate、UpdatedBy。我在我的 sql 更新语句中用用户名/日期填充最后 2 列。我用它来确定谁改变了什么。
    • 感谢您的帮助。我现在已经使用触发器了。我为 CDC 阅读的任何内容都表示它可以用于审计,尽管这不一定是它的设计目的。我担心使用它缩进的东西。最后,我实现了一个系统,该系统创建类似于 CDC 的审计数据,尽管使用触发器。我遵循了类似的4种操作系统,似乎还可以。
    • 开箱即用 CDC 时要非常小心,它会在几天内使数据过期,这对于审计目的是不可接受的。
    【解决方案2】:

    来晚了,但希望对其他读者有用……

    以下是几种不同的审计技术及其优缺点。没有适合所有人的“正确”解决方案。这取决于要求和被审核的系统。

    触发器

    • 优势:相对容易实施,审计内容和审计数据存储方式具有很大的灵活性,因为您可以完全控制
    • 缺点:当你有很多表甚至更多触发器时,它会变得混乱。除非有第三方工具提供帮助,否则维护工作会变得很繁重。此外,根据数据库,它可能会导致性能影响。

    疾病预防控制中心

    • 优点:非常容易实现,原生支持
    • 缺点:仅在企业版中可用,不是很强大 - 如果您更改架构,您的数据将会丢失。我不建议这样做来保持长期的审计跟踪

    痕迹

    • 优势:在审核内容上有很大的灵活性。甚至可以审计 select 语句。
    • 缺点:您需要创建一个单独的应用程序来解析跟踪文件并从中收集有用的信息。

    读取事务日志

    • 优点:您只需将数据库置于完全恢复模式,所有信息都将存储在事务日志中
    • 缺点:您需要第三方日志阅读器才能有效阅读此内容

    我使用过来自ApexSQL 的多个审计工具,但也有来自Idera(合规经理)和Krell 软件(全方位审计)的好工具

    ApexSQL Audit – 基于触发器的审计工具。生成和管理审计触发器

    ApexSQL Log - 允许通过读取事务日志进行审计

    【讨论】:

      【解决方案3】:

      在 SQL Server 2008 中,您可以在文件、应用程序日志或系统日志中使用“审核”功能和库存数据。了解更多信息:http://msdn.microsoft.com/en-us/library/cc280386.aspx

      【讨论】:

        【解决方案4】:

        您可以编辑 Sql Server 作业,该作业会在两天后删除捕获的更改。您还可以根据自己的方便延长此清理时间,或使其永久化。

        【讨论】:

          【解决方案5】:

          我正在使用this 脚本,您可以定义要审核的表或数据库上定义的所有表。另外,tvf 用于单记录查看历史。查看链接,了解详情。

          【讨论】:

            猜你喜欢
            • 2010-09-26
            • 2013-04-03
            • 1970-01-01
            • 2011-07-16
            • 2012-08-07
            • 1970-01-01
            • 2014-12-09
            • 2013-12-19
            • 2016-09-18
            相关资源
            最近更新 更多