【问题标题】:Windows authentication problems using asp.net使用 asp.net 的 Windows 身份验证问题
【发布时间】:2008-10-10 11:56:39
【问题描述】:

我有一个 asp.net 应用程序,它应该从两个 SQL Server 访问数据。其中一个 SQL Server 与 IIS 位于同一台机器上(我们称之为 SQLSERVER1),而另一个 SQL Server 位于另一台机器上(SQLSERVER2)。

两个 SQL 服务器都信任连接字符串。在我的 web.config 文件中,模拟已设置为 true。我在 IIS 和 web.config 中都使用 Windows 身份验证。

当我尝试从 SQLSERVER2 访问数据时,我因 user(null) 错误而登录失败。我通过 Windows 登录的用户在 SQLSERVER2 中作为 SQL 服务器帐户存在。

可能的原因是什么?

注意: 这是一个新手问题恕我直言

注意:使用的 IIS 是 6.0 (Windows 2003)。未设置为 IIS 5.0 隔离模式。

编辑:被冒充的用户是域用户

加法:

我还想声明,当我作为运行 IIS 的服务器的客户端访问它时收到此错误消息。换句话说,假设我在机器A上工作,IIS和SQLSERVER1在机器B上,SQLSERVER2在机器C上。

我在机器 B 上工作时没有收到此错误消息。这让我更加难过。

【问题讨论】:

  • 被模拟的用户是本地机器用户(在两台机器上创建)还是域用户?

标签: asp.net iis-6 windows-authentication


【解决方案1】:

这绝对是一个委派问题。正如一位人士指出的那样,您需要确保正在使用Kereberos 身份验证。旧样式NTLM 不会削减它。这里有更多关于Kerberos vs. NTLM的信息。

简而言之,如果您有一个网络服务器和一个数据库,并且您希望网络服务器在发出数据库请求时模拟用户(以便您可以直接在每个用户或用户组的基础上设置数据库权限) 你正在执行双跳。凭据必须首先从用户的计算机传递到网络服务器,然后再传递到数据库。正如您可以想象的那样,数据库必须信任网络服务器“不作恶”,否则这可能是一个极其危险的安全漏洞。因此,您必须设置 Windows Server 世界中所谓的“委托”...

微软有一篇关于这一切的好文章here。此外,您可以查看this 之类的文章,以了解如何进行设置。我们经常遇到这种情况,一开始可能会很痛苦,尤其是因为作为开发人员,您可能无法直接控制服务器(尤其是生产服务器),并且您必须花费大量时间楼下的服务员。

【讨论】:

    【解决方案2】:

    您可能会遇到此问题,因为基于非 Kerberos 的模拟 (NTLM) 仅在本地计算机(网络服务器)上有效。如果您希望能够使用这些凭据访问另一台计算机,则需要确保您使用的是 Kerberos。

    试试这个:http://support.microsoft.com/kb/810572

    【讨论】:

      【解决方案3】:

      您对网络服务器的身份验证未传递到 sql 服务器。 Web 服务器正在使用运行您的应用程序池的帐户向 SQL Server 进行身份验证。

      【讨论】:

      • 为什么会这样?在线程上模拟应该使用用户安全令牌,并且应该通知 SSPI 连接到 SQL 服务器。
      • @anthonywjones - 请参阅@yadyn 的回答.. 它比我想出的更彻底:)
      【解决方案4】:

      您应该检查 SQLSERVER1 的计算机帐户是否已启用委派信任。否则 SQLSERVER2 将不信任在 SQLSERVER1 上运行的模拟。这是除了首先确认使用 Kerberos 来设置模拟之外的。这也假设服务器和用户都是同一个域的成员。

      顺便说一句,您确定要这样做吗?您最终会创建更多连接,因为它们最终对用户来说是独一无二的?

      【讨论】:

        【解决方案5】:

        您是否尝试使用 SQL SErver 管理员从 Server1 访问 server2 上的数据库并成功连接?

        如果不是,那么这可能是因为默认情况下 SQL Server 安装时默认关闭了 tcp。

        您需要确保已为 server2 开启此功能以允许 server1 连接。 server1 连接没有问题,因为它可以使用共享内存连接。

        【讨论】:

        • 我可以使用 SQLSERVER1 中的企业管理器连接 SQLSERVER2
        猜你喜欢
        • 2010-11-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-17
        • 2017-08-24
        相关资源
        最近更新 更多