审核SQL Server数据更改

审核SQL Server数据更改,sql,sql-server-2005,sql-server-2008,Sql,Sql Server 2005,Sql Server 2008,我正在考虑更改SQLServer2005数据库的审核过程,我在SQLServer2008中遇到了更改数据捕获 这看起来是个好主意,我很想尝试一下,但在我尝试之前,有人在商业环境中使用过它吗?你有什么想法 我注意到,当我在MS帮助中阅读有关CDC的内容时,它说审计数据通常会保留几天。这在这里是不可能的,我想无限期地保存数据,有人知道这种方法存在问题吗 如果出于我不知道的原因,这不是一个好的解决方案,那么您是否有其他用于审计数据更改的解决方案。我渴望使用一个可以在我想要的任何表格上全面实施的系统 我

我正在考虑更改SQLServer2005数据库的审核过程,我在SQLServer2008中遇到了更改数据捕获

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

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

如果出于我不知道的原因,这不是一个好的解决方案,那么您是否有其他用于审计数据更改的解决方案。我渴望使用一个可以在我想要的任何表格上全面实施的系统


我追求的是基本的:“之前、之后、谁通过、何时”信息的任何变化。

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

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

以下是一些链接,其中包含有关如何使用触发器执行此操作的附加信息:


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

在SQL Server 2008中,您可以使用“审计”功能并在文件、应用程序日志或系统日志中存储数据。有关更多信息,请访问:

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

我使用脚本,您可以定义要进行审核的表或数据库中定义的所有表。另外,tvf用于查看历史的单记录。有关详细信息,请查看链接。

已经很晚了,但希望它对其他读者有用

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

触发器

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

  • 优点:非常易于实施,本机支持
  • 缺点:仅在企业版中可用,不太稳定–如果更改架构,数据将丢失。我不建议将其用于长期审计跟踪
跟踪

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

  • 优点:您只需将数据库置于完全恢复模式,所有信息都将存储在事务日志中
  • 缺点:您需要第三方日志读取器才能有效地阅读此日志
我使用过来自的几种审计工具,但也有来自(compliance manager)和软件(omni audit)的优秀工具

–基于触发器的审计工具。生成并管理审核触发器


–允许通过读取事务日志进行审核

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