1

我们有一个 (asp.net) 应用程序,它使用专门为此应用程序设置的登录凭据连接到 SQL Server 2008 R2 数据库。

我们的应用程序通过存储过程访问/修改/删除记录,我们将执行操作的用户的用户名作为参数传递给该存储过程。

我们需要能够保留某些表上所有更新和删除的审计日志。该解决方案还需要尽可能少,并且不需要任何开发人员干预。

我能找到的最简单的方法是在表 (A) 上放置一个触发器,将“旧”数据复制到历史表 (A_History) 问题是我们需要能够判断谁执行了该操作,以便更新这很容易,我们只需查看新插入记录的用户名。但是对于删除,我们无权访问发送到存储过程的用户名参数。

有没有办法在不使用 CONTEXT_INFO() 之类的东西的情况下实现这一点,因为这需要添加到每个存储过程和每个调用中,这一定会被遗忘。

4

1 回答 1

4

SQL 更改跟踪可能对您有所帮助。

现在,您可能应该做一些其他的事情:

  1. 避免实际删除您的记录。
  2. 添加一个活动/已删除的列。
  3. 确保您的表具有 ModifiedByUserID 和 CreatedByUserID 列。
  4. 更新时,要将其标记为已删除或以其他方式,请使用调用者的用户 ID 更新 ModifiedByUserID 列。

实现所有这些,SQL 将跟踪这些记录的每个版本……谁创建了它们……谁修改了它们……谁将它们标记为已删除。

于 2011-03-03T02:33:00.067 回答