繁体   English   中英

SQL Server-跟踪/记录用户所做的更改

[英]SQL Server - Tracking/Logging changes made by users

我们有一个程序,该程序由客户端(多个)->网关->引擎组成...现在,客户想要一个功能,该功能使他们能够查看所做的某些更改以及由谁进行某些更改,因此我们需要保存更改到一些历史记录表。

问题:

因为可能有多个用户并行连接到引擎,所以我们如何知道是否要使用触发器来实现历史记录跟踪,哪个用户进行了某些更改,如何在sql server中识别它(在以前的某个程序中,该连接到sql是顺序的,他们在处理之前将用户ID保存到表中,并使用该ID触发)。

关于与SQL Server的连接-有些事情是使用EF实现的,有些则是使用SP进行的,有些则使用动态查询来实现。

  • CDC不是一种选择,因为并非所有客户都拥有企业版,甚至为了使它起作用,也必须进行一些“黑客攻击”。

  • 我读到CONTEXT_INFO可以用来保存当前的用户ID,然后在sql中从...读取该值。有人尝试过吗?

  • 有些人甚至在表格中添加了列,例如修改日期和用户ID,但我们希望尽可能避免这种情况。

那么...实现此目标的最佳方法是什么? :)

首先,这可能会严重影响您的数据库性能和磁盘空间。

但是,如果您坚持要这样做,则可以找到一个简单的脚本,该脚本在要监视的所有表的列表上进行迭代,并通过sp_executesql动态创建关联的触发器。

然后使用这些触发器的名称约定可能会在以后帮助您维护它们(例如,在数据密集型操作中禁用所有触发器等)。

我建议尝试说服您的客户端仅对少数关键数据表激活此功能。 同样,请始终准备好一个脚本,以停用所有这些触发器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM