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