ApplicationPoolIdentity IIS 7.5至SQL Server 2008 R2无法正常工作


11

我有一个小的ASP.NET测试脚本,该脚本打开了到域中另一台计算机上SQL Server数据库的连接。并非在所有情况下都有效。

设定:

W2K8R2下的IIS 7.5试图连接到远程SQL Server 2008 R2实例。所有机器都在同一域中。

将ApplicationPoolIdentity用于网站时,它无法通过以下方式连接到SQL Server:

用户“ NT AUTHORITY \ ANONYMOUS LOGON”的登录失败。说明:执行当前Web请求期间发生未处理的异常。请查看堆栈跟踪,以获取有关错误及其在代码中起源的更多信息。

异常详细信息:System.Data.SqlClient.SqlException:用户'NT AUTHORITY \ ANONYMOUS LOGON'登录失败。

但是,如果我将过程模型标识切换为NETWORK SERVICE或我的域帐户,则数据库连接成功。

我已授予SQL Server中的\ $访问权限。

我没有在网站上进行任何形式的身份验证,这只是打开数据库连接以确保其正常工作的简单脚本。

我启用了匿名身份验证,并设置为使用应用程序池标识。

我该如何工作?为什么ApplicationPoolIdentity尝试使用匿名登录?更好的是,如何使它停止使用匿名登录?


1
您始终可以将AppPool身份设置为NETWORK SERVICE。
JohnThePro 2012年

Answers:


4

我也有同样的问题。按照此页面,ApplicationPoolIdentity应该以计算机帐户(DOMAIN \ COMPUTERNAME $)的形式访问网络资源,但它是使用NT AUTHORITY \ ANONYMOUS登录访问SQL Server的。

我能够使用此修补程序使ApplicationPoolIdentity像文档所说的那样工作。此修补程序没有专门描述用于以NT AUTHORITY \ ANONYMOUS LOGON访问网络资源的解决方案,但它与更改计算机密码有关。

这个stackoverflow线程帮助我找到了这个解决方案:

有关调试ASP.NET身份和SQL身份的其他有用技巧

由于SQL集成身份验证与线程身份有关,因此能够查看用户身份,线程身份(随模拟而变化)和SQL Server登录很有用。此ASPX代码段显示所有三个:

<%@ Import Namespace="System.Security.Principal" %>

<div>ASP.NET Request User identity: <%= User.Identity.Name %></div>
<div>Current thread/process WindowsIdentity: <%= WindowsIdentity.GetCurrent(false).Name %></div>
<asp:SqlDataSource ID="CurrentUserData" runat="server" ConnectionString="<%$ ConnectionStrings:ConnID %>"
           SelectCommand="select SYSTEM_USER" />
<asp:DetailsView DataSourceID="CurrentUserData" runat="server" />

2

我有完全相同的问题。我拉了几个小时的头发,最后重新启动了机器。问题消失了!请注意,通过iisreset DID重新启动IIS不能解决问题。仅当我重新启动服务器时它才消失。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.