ASP.NET站点在远程访问时失败,';NT授权\匿名登录';。使用应用程序池的域用户访问SQL Server

ASP.NET站点在远程访问时失败,';NT授权\匿名登录';。使用应用程序池的域用户访问SQL Server,asp.net,sql-server,iis,windows-authentication,sspi,Asp.net,Sql Server,Iis,Windows Authentication,Sspi,我有一个ASP.NET(4.0)站点,仅使用窗口身份验证和模拟进行访问(禁用异常) SQL Server连接是通过SSPI和应用程序池的用户标识完成的,而不是通过登录用户和Windows身份验证用户的Windows域用户完成的 当从IIS Web服务器本地访问网站时,一切正常 从远程PC访问时,即使使用同一域用户,也会失败 所有服务器都在同一个域上。。。。有什么想法吗 感谢这是一个“双跃点”问题,即不信任服务器将客户端的凭据传递到另一个框(跃点1是到IIS框的凭据,跃点2是从IIS框传递到SQL

我有一个ASP.NET(4.0)站点,仅使用窗口身份验证和模拟进行访问(禁用异常)

SQL Server连接是通过SSPI和应用程序池的用户标识完成的,而不是通过登录用户和Windows身份验证用户的Windows域用户完成的

当从IIS Web服务器本地访问网站时,一切正常

从远程PC访问时,即使使用同一域用户,也会失败

所有服务器都在同一个域上。。。。有什么想法吗

感谢

这是一个“双跃点”问题,即不信任服务器将客户端的凭据传递到另一个框(跃点1是到IIS框的凭据,跃点2是从IIS框传递到SQL server)。它在直接在服务器上运行时工作,但在从远程PC访问时不工作。更多

根据需要,您可能需要Windows身份验证,但不需要SQL Server上的模拟。SQL Server上的模拟意味着对于每个用户,您都需要在数据库中拥有帐户/权限。如果情况并非如此,并且您只需要安全身份验证(在web.config中不需要硬编码用户名和密码),那么您可以执行以下操作

  • 使IIS不受污染
  • 将池设置为使用网络服务帐户
  • 使用domainName\WebServerMachineName$在数据库服务器中创建登录帐户并授予权限
更多

如果你还需要模仿,那就做吧

确保将应用程序服务器设置为受信任的委派服务器。 确保在IIS中禁用匿名身份验证,并且Windows 已启用身份验证,如果使用Windows 2008,请启用ASP.Net 模仿也是。如果使用Windows 2008且您的应用程序池正在运行 在“网络服务”下,然后转到Windows的高级设置 验证并关闭内核模式。设置域\应用服务器$ 对ASP.Net应用程序文件夹具有读取权限


我很困惑,你说的是两件不同的事。您说您正在使用Windows身份验证和模拟。模拟会导致工作进程以登录用户的身份运行,如果使用SSPI连接,这也会导致与数据库的连接以登录用户的身份运行,因为应用程序池标识是登录用户。但是你说你不是。。。你到底是如何做这些相互排斥的事情的?@ErikFunkenbusch你是对的。事实证明,我测试的用户也是用于SQL Server的用户。您知道有什么方法可以让Windows身份验证和模拟用于Web服务器处理,但仍可以使用其他Active Directory用户连接到SQL Server?为什么需要模拟该用户?因为我们还可以从Web应用访问磁盘上的一些文件,并且客户端将用户组织在Active Directory组中,有些人有权访问某些文件,而有些人没有。有其他方法可以访问这些文件,例如,您可以在代码中检查它们的AD权限,并将它们与文件的AD权限进行比较(所有文件都必须具有工作进程访问权限)。我不需要双跳。我不需要在web服务器上模拟的用户是登录SQL server的用户,需要应用程序池的单个用户在web服务器上进行Windows身份验证时访问SQL server进行身份验证,然后按照我上面列出的三个步骤进行操作。没有机会尝试它们,客户端有点安全敏感,但是猜测这3个步骤将启用双跳并使用windows身份验证用户登录SQL Server数据库。这是他们不想要的。我猜我们必须在Web服务器上的模拟和SQL Server上的SQL身份验证之间做出选择,而不是在Web服务器上的无模拟和SQL上的Active Directory身份验证(使用单个硬编码用户)