使用asp.net的Windows身份验证问题
我有一个asp.net应用程序,可以从两台SQL服务器访问数据。其中一个SQL server与IIS位于同一台计算机上(我们称之为SQLSERVER1),而另一个SQL server位于另一台计算机上(SQLSERVER2) 两台SQL Server都信任连接字符串。在我的web.config文件中,模拟已设置为true。我正在IIS和web.config中使用Windows身份验证 当我尝试从SQLSERVER2访问数据时,由于用户(null)错误导致登录失败。我通过Windows登录的用户在SQLSERVER2中作为SQL server帐户存在 可能的原因是什么 注意:这是一个新手问题 注意:使用的IIS是6.0(Windows 2003)。它未设置为IIS 5.0隔离模式。 编辑:被模拟的用户是域用户 添加: 我还想声明,当我作为运行IIS的服务器的客户端访问时,收到了此错误消息。换句话说,假设我在机器A上工作,IIS和SQLSERVER1在机器B上,SQLSERVER2在机器C上。使用asp.net的Windows身份验证问题,asp.net,iis-6,windows-authentication,Asp.net,Iis 6,Windows Authentication,我有一个asp.net应用程序,可以从两台SQL服务器访问数据。其中一个SQL server与IIS位于同一台计算机上(我们称之为SQLSERVER1),而另一个SQL server位于另一台计算机上(SQLSERVER2) 两台SQL Server都信任连接字符串。在我的web.config文件中,模拟已设置为true。我正在IIS和web.config中使用Windows身份验证 当我尝试从SQLSERVER2访问数据时,由于用户(null)错误导致登录失败。我通过Windows登录的用户在
当我在机器B上工作时,我没有收到此错误消息。这让我更加困惑。您可能遇到此问题,因为非基于Kerberos的模拟(NTLM)仅在本地机器(Web服务器)上有效。如果您希望能够使用这些凭据访问另一台计算机,则需要确保您使用的是Kerberos
尝试以下操作:您对Web服务器的身份验证没有传递到sql server。web服务器正在使用运行应用程序池的帐户向SQL server进行身份验证。您应该检查SQLSERVER1的计算机帐户是否已启用委托的信任。否则SQLSERVER2将不信任SQLSERVER1上运行的模拟。除此之外,还要确认Kerberos首先用于设置模拟。这还假设服务器和用户都是同一域的成员
顺便说一句,如果你确定要这样做,你最终会创建更多的连接,因为它们是用户独有的?这绝对是一个委派问题。正如一位人士指出的,您需要确保正在使用身份验证。旧的款式不适合它。这里有更多关于 简言之,如果您有一个Web服务器和一个数据库,并且希望Web服务器在发出数据库请求时模拟用户(以便您可以直接在每个用户或用户组的基础上设置对数据库的权限),那么您正在执行双跳。凭据必须首先从用户的计算机传递到Web服务器,然后再传递到数据库。可以想象,数据库必须信任Web服务器“不做坏事”,否则这可能是一个极其危险的安全漏洞。因此,您必须设置Windows服务器世界中的“委派”
微软有一篇关于这一切的好文章。此外,您可以浏览一篇文章,了解如何设置它。我们经常遇到这种情况,一开始可能会很痛苦,尤其是作为开发人员,您可能无法直接控制服务器(尤其是生产服务器)您将不得不花大量时间与大厅里的服务器人员在一起。您是否尝试从Server1使用SQL server administrator访问server2上的数据库并成功连接 如果不是,这可能是因为默认情况下,SQL Server在安装时默认关闭tcp 您需要确保已为server2启用此选项,以允许server1连接。
server1可以使用共享内存连接,因此连接没有问题。正在模拟的用户是本地计算机用户(在两台计算机上创建)还是域用户?为什么?线程上的模拟应该使用用户安全令牌,这将通知到SQL server的SSPI连接。@anthonywjones-请参阅@yadyn的答案。。这比我能想到的更彻底:)我可以使用SQLSERVER1中的Enterprise Manager连接SQLSERVER2