在sql-server中实现审计跟踪的最佳方法是什么?

我不知道这些要求是否标准,但我不知道是否有解决scheme可以做到以下几点:

  • 对于一组指定的表,在相关表的审计版本中更改logging之前保留一份logging的副本。

我宁愿不必为每个表编码。 我想知道是否有一个解决scheme,你可以安装在MS-SQL的顶部,这将为你做这个?

有很多方法可以做到这一点,取决于你使用的是哪个版本的SQL服务器。

这里有几个

  • 审计追踪与阴影表和触发器。 链接在这里

  • 也可以考虑使用SQL Server 2008 Auditfunction。 链接在这里

希望它会有所帮助。

您可以尝试使用基于第三方点击触发的解决scheme,例如ApexSQL Audit – SQL Server数据库的审计工具,该工具可以捕获数据库中发生的数据更改,包括谁进行了更改,哪些对象是受影响的时间,以及用于进行更改的SQLlogin,应用程序和主机的信息。 它将所有捕获的信息存储在中央存储库中,并以便于打印的格式导出

免责声明:我在ApexSQL担任产品支持工程师

我创build触发器,这样做的XML这样我们可以logging所有表到相同的表,使其更加灵活

CREATE TABLE [dbo].[AuditAll] ( AuditId int NOT NULL IDENTITY(1,1), [DateTime] datetime NOT NULL, TableName nvarchar(255) NOT NULL, AuditEntry xml NULL, CONSTRAINT [PK_AuditAll] PRIMARY KEY CLUSTERED ( AuditId ASC ) ) 

我只需要“旧”值,所以我只存储删除的表,无论如何可以在表中看到插入的表。

 CREATE TRIGGER AuditSimple ON Simple AFTER INSERT,DELETE,UPDATE AS BEGIN -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. SET NOCOUNT ON; IF (SELECT COUNT(*) FROM deleted) > 0 begin Declare @AuditMessage XML --set valut to all xml from deleted table set @AuditMessage = (select * from deleted for xml auto) insert into AuditAll( DateTime, TableName, AuditEntry ) values ( GetDate(), 'Simple', @AuditMessage ) end END GO 

我想这可以很容易地在sp_foreach中调用,为数据库中的每个表创build它,但是现在我们并不需要它,只要记住更改表名

干杯

看看触发器。 这些可以用来实现一些东西来适应你的要求。

看看这篇文章 – SQL Server 2008中的审计,它很好地利用了SQL Server 2008中已经存在的审计function。

我还必须提到@Microtechie回答了一些伟大的文章。 阅读并决定哪一个更容易适应。

通过数据库快照,您可以在该瞬间保持数据的只读副本。 同样,如果您需要备份日志,则可以在特定的时间段内恢复您的信息。

您还可以从日志中读取信息以检索已更改的信息。

另一个不是你的偏好的解决scheme是使用触发器跟踪更改,但可能需要在每个表上工作。 您还可以启用更改数据捕获function来检测更改,此function也需要启用每个表,但它需要比触发器更less的代码。

最后,还有第三方工具,如Apex SQL Trigger ,只需点击几下鼠标即可自动完成这项工作。