【问题标题】:Pass forms user to SQL Database将表单用户传递给 SQL 数据库
【发布时间】:2016-04-04 22:41:43
【问题描述】:

我有一个基于 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 返回我当前的 Windows 登录。是否有任何最佳实践方法可以访问通过数据库中的表单登录到 WebApp 的用户?

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

【问题讨论】:

  • 如果它是互联网上的 wen 应用程序,可能您只有一个 windows 用户可以连接到数据库。如果它在一个小型内部网络应用程序中,并且每个用户都使用 Windows 身份验证连接到网络应用程序,您可以在触发器中使用用户信息吗?如果您有 Windows 用户名/密码并且需要使用集成安全性,则可以模拟。但是如果你想区分用户,为什么要模拟呢?只需使用集成安全性。实际上,对我来说,不清楚你要做什么
  • 感谢您的评论。最终,应用程序应该进入 Web 的某个地方。我想通过表单对用户进行身份验证,并且我想访问 SQL 数据库中的用户凭据。我对该主题相当陌生,因此我还没有完全掌握 SQL 连接最终的外观,即使用用户凭据连接或使用管理员帐户并以不同方式传递用户凭据。
  • 当您使用表单身份验证时,您的应用程序将要求用户输入他们在 Windows 服务器上定义的 Windows 用户名/密码(或者您必须将其传递给服务器)。这些用户名应在 SQL Server 登录中定义,并具有工作所需的权限。 “Integrated Security=SSPI”等于“Integrated Security=true”,这意味着您的应用程序使用 Windows 用户连接到 SQL Server
  • 所以是的,我正在使用标准 MVC 模板附带的整个 OAuthWebSecurity。我试图避免在 IIS 中注册每个用户,而是让一个管理员帐户进行连接。但是,与模拟类似,我想跟踪数据库中的实际登录用户。我想知道是否有一个很好的方法来做到这一点。如果不是,如果不可能,连接字符串将如何显示,即连接字符串动态使用当前用户,而不是字符串中定义的静态用户。
  • 我想如果你把 USER1 冒充成 USER2,那么就没有 USER1 了。并且您的应用只能看到 USER2。为了能够在数据库级别跟踪连接的用户,您需要使用“Integrated Seurity=true”而不是使用模拟。我认为如果您想在后台使用管理员帐户并仍然跟踪连接的用户/操作员,您的应用程序应该只使用 WebService 或 WebAPI 并将用户信息传递给每个 API。据我所知,没有其他办法。

标签: asp.net sql-server visual-studio-2015 forms-authentication


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-26
    • 2021-12-29
    • 2013-10-15
    • 2014-10-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多