C# 更好的维护数据库中表审计的方法

C# 更好的维护数据库中表审计的方法,c#,sql-server-2008,audit,C#,Sql Server 2008,Audit,我们有一个使用变更数据捕获(CDC)功能的生产数据库来维护少数表的审计数据。但是,由于性能影响,并且需要对数据库结构进行更改,例如添加索引,这是由于CDC而无法做到的,因此我们现在希望禁用CDC 需求是在单个审计表中捕获web应用程序中一组表的所有插入、删除和更新操作。 举个例子,对于通过web应用程序[在C#中]对TableA进行的每次添加、更新和删除,我都必须在TableB中维护TableA的审核信息 我目前正在更新每个存储过程,这些存储过程可能会导致集合中每个表的这3个操作之一。但它太容易

我们有一个使用变更数据捕获(CDC)功能的生产数据库来维护少数表的审计数据。但是,由于性能影响,并且需要对数据库结构进行更改,例如添加索引,这是由于CDC而无法做到的,因此我们现在希望禁用CDC


需求是在单个审计表中捕获web应用程序中一组表的所有插入、删除和更新操作。 举个例子,对于通过web应用程序[在C#中]对TableA进行的每次添加、更新和删除,我都必须在TableB中维护TableA的审核信息

我目前正在更新每个存储过程,这些存储过程可能会导致集合中每个表的这3个操作之一。但它太容易出错,而且耗时,因为我有大量的表


请提供一种在时间和性能上都更高效的方法来帮助实现这一点。

快速回答:只需确保记录所有将更改数据库的操作即可

在我们的项目中,我们创建了一个单独的表,其中包含以下字段

   Date_And_Time     Actions     UserID     Part_of_Program
每当用户执行insert、update或delete命令,或登录或注销系统,或系统在我们的数据库中运行自动操作时,程序都会自动在此处插入一条记录,告诉我们采取了哪些操作,是谁做的,以及程序的哪些部分受到了影响

…或 您可以编写代码,不断检查表的当前大小。如果尺寸发生变化,则将其记录在审核表中。
如果大小增加,则插入数据。否则数据将被删除。

捕获所有插入、删除和更新操作意味着触发器。想法:我不认为我可以使用触发器,因为也有批处理过程更新这些表,我们不想通过它们审核信息。只有通过web应用程序执行的操作才需要审核。我不知道CDC,但可能在表中插入/更新/删除后使用存储库模式或工作单元(在webapp中),您可以在审核表中插入,也可以在表的插入/更新/删除后使用AOP,并且可以异步执行(后台任务)它不会阻止webapp请求的“流”…然后执行另一个insert命令,每当用户使用影响数据库的网页控件时,该命令会将数据插入审核表。IE:您有一个按钮,用于保存用户所做的更改。执行update命令后,对已有的审核表运行另一个insert命令。在这种情况下,我投票结束您的问题。我们没有X光来查看您的C#应用程序内部:它使用存储过程来管理数据?它使用EF吗?阿多?dbcontext?你的积垢模式是什么?等等。OP没有询问如何设计他的审计表,他需要建议如何捕获所有相关事件(即,从他的web应用程序中更新、插入、删除)。那么,当用户使用其系统上的控件时,这些事件不是被触发了吗?然后让他执行另一个命令,每当控件在他的webapp上执行相关事件时,他都会将数据插入到他的审核表中。他在评论中写道,他不能使用触发器,因为触发器运行的是他们不希望在审核表中看到的批处理操作。如果是一个控件/触发器,则不要执行对审核表的插入运行这些批处理。在这种情况下,我投票结束您的问题。我们没有X光来查看您的C#应用程序内部:它使用存储过程来管理数据?它使用EF吗?阿多?dbcontext?你的积垢模式是什么?等