我正在考虑使用AFTER INSERT, DELETE, UPDATE
触发器来捕获对我的一个数据库的更改。我想要的一件事是捕获进行更改的用户的名称。
由于我使用专用 SQL 帐户连接到数据库(来自 ASP.NET MVC),我不相信SUSER_SNAME()
会为我提供准确的信息。
无论如何,我是否可以将 ASP.NET MVC 端的用户名输入触发器?
ASP.NET 端配置为针对 Active Directory 的 Windows 身份验证。
我正在考虑使用AFTER INSERT, DELETE, UPDATE
触发器来捕获对我的一个数据库的更改。我想要的一件事是捕获进行更改的用户的名称。
由于我使用专用 SQL 帐户连接到数据库(来自 ASP.NET MVC),我不相信SUSER_SNAME()
会为我提供准确的信息。
无论如何,我是否可以将 ASP.NET MVC 端的用户名输入触发器?
ASP.NET 端配置为针对 Active Directory 的 Windows 身份验证。
看看Set Context_Info。我过去在审计和使用 sql 身份验证时已经成功使用过这个。这个想法是您在上下文中设置登录用户,然后在数据库触发器中从上下文中检索此信息并将其存储在数据库中。如果您忘记在上下文中设置用户,您总是可以回退到 suser_name(虽然这对审计不是很有用,但在直接在 SSMS 中进行更改时很有用)。谷歌“Audit Trail Set Context_Info”,你会发现一些例子。
您可以使用Thread.CurrentPrincipal
获取 Windows 帐户并将其作为参数传递给您的查询,因此可用于触发器。
var userName = Thread.CurrentPrincipal.Identity.Name;