将表单用户传递给 SQL 数据库

Pass forms user to SQL Database

我有一个基于 Vs2015 标准模板的 MVC WebApp。我正在使用表单身份验证

<authentication mode="Forms">
  <forms loginUrl="~/Account/Login" timeout="2880" />
</authentication>

以及具有集成安全性的 localDB:

<add name="DefaultConnection" connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=aspnet-test;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\aspnet-test.mdf" providerName="System.Data.SqlClient" />

对于 SQL 数据库中的触发器,我想访问当前通过表单登录到 WebApp 的用户。但是,SQL system_user returns 我当前的 Windows 登录。是否有任何最佳实践方法来访问通过数据库中的表单登录到 WebApp 的用户?

我看了很多关于冒充的文章。但是,他们似乎都有相反的问题:他们想在数据库中显示 Windows 用户。 我可以使用模拟来传递表单用户吗?或者有没有办法将当前 WebApp 用户传递给禁用集成安全性的连接字符串?

我发现的最佳方法是使用 SET CONTEXT_INFO,它完全符合我的要求。这样做的缺点是需要将当前用户 ID 传递给存储库中的每个函数,因为我没有找到一种方法将其自动传递给连接(构造函数)。

如果我找到将用户从控制器传递到模型容器的方法,我将更新此答案。

(参见 https://msdn.microsoft.com/en-us/library/ms187768.aspx