Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用asp.net的Windows身份验证问题_Asp.net_Iis 6_Windows Authentication - Fatal编程技术网

使用asp.net的Windows身份验证问题

使用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登录的用户在

我有一个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上。


当我在机器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