如何查找谁更改了 SQL Server 2014 中的表值?

res*_*had 3 sql-server audit sql-server-2014

我们在一个名为的数据库上有几个表mydb,应用程序使用它来存储或检索记录。不知何故,有人更改了test表上的值,这导致了一个严重的问题。

我们从不同来源接收常量数据,当数据在表上更新时,触发器会触发并检查特定值,如果值为 360,则它将更新行,否则它什么都不做。

现在我有两个问题:

  1. 我想知道谁在 4 天前更改了该值?
  2. 我在 SQL 服务器错误日志中没有看到任何成功登录(用户登录)。我假设有人使用了一个名为user. 现在谁使用该帐户登录?

表上的值本应为 350,但已更改为 800。

有小费吗?

Sha*_*tor 7

SQL Server 不会在没有你设置的情况下跟踪谁做了什么,现在是设置它的好时机,因为你下次会发现它。您可以尝试阅读交易日志以查看发生了什么(减去用于进行更改的主要帐户),否则您将需要在将来设置某些内容。

查看谁更改了什么以及何时在表更改时将触发器放在表上的最佳方法,您可以通过将更改内容插入审计表来审计信息。我添加了诸如 getdate 和 suser 之类的字段,以便我可以查看谁修改以及何时修改。

更轻量级的版本是使用 DMV记录sp_whoisactive或其他监控 工具。这不会抓住一切。

CT / CDC是另一种选择,但他们不会透露是谁进行了更改。您可以对触发器进行更改,以便它也可以使用 suser,但它只会显示运行 CT / CDC 的帐户。

如果升级到 2016 或更高版本是一个可行的选择,我建议查看结合 SQL 审计的时态表。时态表可以让您深入分析更改的内容,而 SQL 审计可以让您深入了解是谁进行了更改。这是 Nic 关于设置 SQL Audit 的堆栈交换的一个很好的答案

  • @reshad 事务日志_不_包含进行修改的主体。意思是,如果没有在_before_进行更改之前基于触发器的审计机制,就无法返回并找出是谁做的。 (4认同)

归档时间:

查看次数:

3725 次

最近记录:

7 年,7 月 前