Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 无触发器的SQLServer2005审计_Sql Server_Triggers_Boilerplate_Auditing - Fatal编程技术网

Sql server 无触发器的SQLServer2005审计

Sql server 无触发器的SQLServer2005审计,sql-server,triggers,boilerplate,auditing,Sql Server,Triggers,Boilerplate,Auditing,我想在我的应用程序中实现审计。我不想在整个应用程序中添加样板代码,而且使用触发器会对性能产生影响,这是无法做到的,因为处理的大多数数据都是实时显示的 有没有其他办法呢。我目前正在使用SQL server 2005。如果您使用的是NHibernate,则可以使用NHibernate事件侦听器。 如果您使用EntityLite,则可以覆盖DataService插入、更新和删除方法。 如果您使用的是实体框架,您可以使用描述的分析技术 如果您使用的是原始ADO.NET,那么它会更复杂,也许您可以编写一个

我想在我的应用程序中实现审计。我不想在整个应用程序中添加样板代码,而且使用触发器会对性能产生影响,这是无法做到的,因为处理的大多数数据都是实时显示的


有没有其他办法呢。我目前正在使用SQL server 2005。

如果您使用的是NHibernate,则可以使用NHibernate事件侦听器。 如果您使用EntityLite,则可以覆盖DataService插入、更新和删除方法。 如果您使用的是实体框架,您可以使用描述的分析技术
如果您使用的是原始ADO.NET,那么它会更复杂,也许您可以编写一个ADO.NET提供程序包装,但这项工作太多了。

我找到了以下关于此主题的文章:


更简单的方法是创建一个通用的审计过程,并在必要时使用它来记录值得审计的事件。

SQL更改数据捕获(CDC)是否适合您?需要在数据库和要跟踪的每个表上启用它,但它会自动跟踪一个单独表中的所有更改。

在SQL server 2005和下一版本中有另一种审计方法,作为触发器的替代方法:对任何DML操作使用OUTPUT子句。 您可以参考StackOverflow和MSDN了解如何使用它。我在DML操作时实现了PUTPUT子句,并将数据插入Audittrail表。关于output子句最好的一点是,它们可以访问“inserted”和“deleted”表,比如触发器

否则,请尝试SQL server的ChangeTracking功能


谢谢大家!

“使用触发器会对性能产生影响”-我能想到的任何解决方案都会对性能产生一些影响-您正在移动更多的数据,这些数据需要存储。您是否实施了触发器并测量了对性能的不可接受的影响?如果是这样的话,您要处理的是哪种类型的数据量,哪些是可以接受的?是的,它对性能有很大的影响,因为数据非常巨大,一次调用或多次调用可以达到100000~如果您只想审核少数表上的更改,您可以始终隐藏表(重命名?),并编写自己的过程来提供对这些表的访问,您可以在其中添加审核操作。您提到的文章使用的是较新版本的visual studio。我想在SQL SERVER 2005中进行审核。但是,这无法帮助我记录在任何值中发生的更改所涉及的过程。是否有任何方法可以记录所涉及的流程和其中所做的更改。您使用的是什么数据访问技术?存储过程和NHibernate