【问题标题】:SqlConnection Integrated SecuritySqlConnection 集成安全
【发布时间】:2016-12-23 09:54:17
【问题描述】:

我有一个在 IIS 内的 Windows Server 上运行的 Web 应用程序。此应用正在使用 Windows 身份验证。我正在尝试使用 C#SqlConnection,因为我需要使用 TVP 调用存储过程,但我遇到了登录问题。

错误是

用户“NT AUTHORITY\ANONYMOUS LOGON”登录失败

但我的 HttpContext.Current.Identity 是我的 Windows 帐户。

using (var conn = new SqlConnection(connection))
{
    conn.Open();
}

如果我使用实体框架,这将有效:

using (var context = new DatabaseEntities())
{
  ...       
}

我很好奇为什么在标准 c#SqlConnection 中,它不使用 Windows 标识,但在实体框架连接中,它使用了。有什么帮助吗?

【问题讨论】:

  • “标准 c# sql 连接”是什么意思?相对于什么?您已经展示了两段相同的代码。你是说一个有效,另一个无效? connection 变量的内容是什么? (用虚拟数据替换所有地址、用户名和密码,但保留所有部分)。
  • 顺便说一句,您知道您可以使用实体调用/调用存储过程,对吧?我很好奇为什么你通常使用 EF,但是对于这个 sproc 调用,你显然不想?
  • 我已经更新了我的 OP。只有在不同的服务器上运行时才会失败,所以我无法为您提供连接信息。我没有使用实体框架,因为 EF 不支持表值参数作为 SP 的参数。
  • 连接字符串是什么

标签: c# asp.net entity-framework


【解决方案1】:

要在进行数据库调用时使用 HttpContext.Current.Identity,您需要启用模拟。这会更改 asp.net 进程以模拟您运行。

要启用它,请将以下内容添加到 web.config 的 system.web 节点:

<identity impersonate="true"/>

您可以在https://msdn.microsoft.com/en-us/library/xh507fc5.aspx找到更多信息

【讨论】:

    猜你喜欢
    • 2012-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-28
    • 2012-02-28
    • 2021-04-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多