2011-06-29 29 views
1

我正在考慮使用AFTER INSERT, DELETE, UPDATE觸發器來捕獲對其中一個數據庫的更改。我想要的一件事是捕獲進行更改的用戶的名稱。使用觸發器的數據庫審計日誌 - 用戶信息

由於我使用專用的SQL帳戶連接到數據庫(從ASP.NET MVC),我不相信SUSER_SNAME()會向我提供準確的信息。

反正我有沒有把ASP.NET MVC端的用戶名加入到觸發器中?

ASP.NET端配置爲針對Active Directory進行Windows身份驗證。

回答

3

看看Set Context_Info。過去在審計和使用sql認證時,我已經成功地使用了它。這個想法是,你在上下文中設置登錄用戶,然後在數據庫觸發器中從上下文中檢索這些信息並將其存儲在數據庫中。如果您忘記在上下文中設置用戶,則始終可以回退到suser_name(儘管對審計不太有用,但在直接在SSMS中進行更改時可能很有用)。谷歌「審計跟蹤設置Context_Info」,你會發現一些例子。

像這樣oneother one

+0

哇涼的。第二個例子實際上把它們全部結合在一起,因爲我想知道如何用EF做到這一點。謝謝。 – Nasir

0

您可以使用Thread.CurrentPrincipal獲取Windows帳戶並將其作爲參數傳遞給您的查詢,因此可用於觸發器。

var userName = Thread.CurrentPrincipal.Identity.Name;