Sql-Server
如何查找誰更改了 SQL Server 2014 中的表值?
我們在一個名為的數據庫上有幾個表
mydb
,應用程序正在使用這些表來儲存或檢索記錄。不知何故,有人改變了test
桌子上的一個值,這導致了一個嚴重的問題。我們從不同的來源接收常量數據,當數據在表上更新時,觸發器會觸發並檢查特定值,如果值為 360,那麼它將更新行,否則它什麼也不做。
現在我有兩個問題:
- 我想知道誰在 4 天前更改了該值?
- 我在 SQL Server 錯誤日誌中沒有看到任何成功的登錄(使用者登錄)。我假設有人使用了一個名為
user
. 現在誰使用該帳戶登錄?表上的值本來應該是 350,結果改成了 800。
有小費嗎?
如果沒有您進行設置,SQL Server 不會跟踪誰做了什麼,現在是設置它的好時機,因為您下次會發現它。您可以嘗試閱讀事務日誌以查看發生了什麼(減去用於進行更改的主要帳戶),否則您將需要在未來進行設置。
查看誰更改了什麼以及何時更改的最佳方法是在更改時將觸發器放在表上,您可以通過將更改的內容插入審計表來審計資訊。我添加了諸如 getdate 和 suser 之類的欄位,這樣我就可以查看修改者以及修改時間。
一個更輕量級的版本是使用 DMV記錄sp_whoisactive或其他監控 工具。這不會抓住一切。
CT / CDC是另一種選擇,但他們不會透露是誰做出了改變。您可以對觸發器進行更改,使其也可以使用 suser,但它只會顯示執行 CT / CDC 的帳戶。
如果升級到 2016 或更高版本是一個可行的選擇,我建議結合 SQL 審計查看臨時表。時態表可以讓您深入分析更改的內容,SQL 審計可以讓您深入了解誰進行了上述更改。這是 Nic 在 stack exchange 上設置 SQL Audit 的絕佳答案。
我建議添加一個審計表和触發器以在該表上進行更新。
考慮到它沒有經常更新。使用
SUSER_SNAME()
和ORIGINAL_LOGIN()
擷取你的肇事者。祝你好運!