连接字符串上的用户 ID 不是变量,并且与程序的用户 ID(例如可以是 GUID)不同。如果您的连接字符串的用户 ID 是静态的,您如何审核日志删除?
记录插入/更新/删除的最佳位置是通过触发器。但是使用静态连接字符串,很难记录谁删除了某些内容。有什么选择?
使用 SQL Server,您可以使用 CONTEXT_INFO 将信息传递给触发器。
我在必须使用触发器的代码(由网络应用程序调用)中使用它(例如,表上的多个写入路径)。这是无法将我的逻辑放入存储过程的地方。
我们也有类似的情况。我们的 Web 应用程序始终以相同的数据库用户身份运行,但使用不同的逻辑用户进行应用程序跟踪和控制。
我们通常将逻辑用户 ID 作为参数传入每个存储过程。要跟踪删除,我们一般不删除行,只需将状态标记为已删除,并相应地设置 LastChgID 和 LastChgDate 字段。对于重要的表,我们保留审计日志(每个更改状态的副本),我们使用上述方法,触发器将行复制到审计表,LastChgID 已正确设置,触发器无需担心关于获取身份证。