【问题标题】:How to audit all changes in a .net application with SQL Server如何使用 SQL Server 审核 .net 应用程序中的所有更改
【发布时间】:2013-04-07 06:28:27
【问题描述】:

我有一个 .net 应用程序,它主要使用 EF 以及 SQL Server 2008,但有几个客户使用 2005。数据库中有几百个表。我需要审核这些表的选择以记录所有数据插入/更新/删除。我正在考虑拥有这些表的副本以记录所有更改以及日期时间和用户名,然后在实际表上设置触发器以将数据更改插入相关审计表。这是解决这个问题的最好方法吗?触发器是最好的方法还是我应该使用 EF?我本来想只拥有一张审计表,但我认为它很快就会失控。

【问题讨论】:

  • 您是否考虑过使用 SQL Server Profiler 来记录对这些表的所有操作?
  • 请注意:SQL 服务器分析器旨在分析问题,而不是用作审计工具。尽管它给服务器带来了很大的负载,但实际上很难将结果用作任何审计的可靠基础
  • 将其存储在单个审计表中意味着 a) 将所有审计信息存储为例如XML,这可能会限制您搜索审计的能力,或者 b) 许多实际上是匿名的列,例如IntColumn1IntColumn2 等,其中插入了数据,但您现在需要知道从每个表到这些列的映射,或者 c) 包含来自所有审计表的所有可能列的超宽表.就个人而言,这些都没有那么吸引人。

标签: c# sql-server entity-framework auditing


【解决方案1】:

审核 SQL Server 并非易事,尤其是当您需要支持旧版本的 SQL Server 时。

  • 使用 DbContext 跟踪更改。这将增加您的应用程序的开销,并且(正如您已经指出的)将很容易成为一场噩梦(键值无法扩展,需要调整历史表的结构更改(例如,您如何反映删除的列) )

  • CDC - 如果您的 SQL 服务器支持 CDC,这是一个不错的选择,并且对您的应用程序的影响较小

  • Audit SQL Server 等第三方选项您需要调查他们是否满足您的需求

编辑: CDC 在 SQL 2005 中不可用

【讨论】:

  • 干杯,审计 SQL Server 看起来不错,需要进一步调查...
【解决方案2】:

还要检查这个:http://doddleaudit.codeplex.com/

我们正在使用它来审核我们产品中的数据库更改。您还可以轻松修改它以满足您的需求。

【讨论】:

    【解决方案3】:

    从 SQL Server 2008 开始,您需要 some built-in functionalities 去做,我想,您想做的事。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-31
      • 2019-12-13
      • 1970-01-01
      • 1970-01-01
      • 2010-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多