为什么我的Web应用程序没有使用AppPoolIdentity在同一台机器上登录SQL Server?

时间:2013-11-27 21:49:53

标签: sql-server security iis

基本问题:

我有一个Web应用程序访问同一台机器上的SQL Server数据库。网络应用程序在自己的应用程序池下运行 - 我们称之为MyAppPool。如果我在IIS管理器中转到高级设置,我可以看到MyAppPoolApplicationPoolIdentity下运行。当我向网络应用发出请求时,我可以打开任务管理器并验证w3wp.exe的用户名是MyAppPool。在SQL Server中,我添加了一个Windows用户IIS AppPool\MyAppPool,并为其提供了从db读取所需的权限。问题是当我尝试登录SQL Server时,DOMAIN\MACHINE$登录失败。它超越了我。为什么应用程序未以IIS AppPool\MyAppPool登录?

详细信息:

我知道其他地方已经问过这个问题的变体,但我真的陷入了困境,没有解决方案。我尝试向<identity impersonate="true" />添加web.config。如果我这样做,我的NT AUTHORITY\IUSR登录失败。我尝试从托管它的计算机访问Web应用程序并获得相同的登录错误。我正在运行IIS8,Windows Server 2012和SQL Server 2012。

我能找到的最近的问题是Why is my MVC app trying to log into my DB as my machine, and not as the App Pool identity?,并且提供的解决方案不起作用。我无法改变Integrated Security是错误的(过去我运行过这个东西)。引用https://stackoverflow.com/a/15145488/147530

  

ApplicationPoolIdentity使用IIS AppPool \ ApplicationPool进行本地化   访问,但DOMAIN \ MACHINE-NAME $用于远程访问

听起来很合理。问题是当db托管在同一台机器上时,ApplicationPoolIdentity不使用IIS AppPool\MyAppPool标识的原因??

引用另一篇SO帖子,IIS application using application pool identity loses primary token?

  

此应用程序还使用连接到SQL Server数据库   Integrated Security =连接字符串中的true。如果数据库是   本地,然后我们看到IIS APPPOOL \ OurAppPoolName用于连接   到数据库;如果数据库是远程的,那么机器帐户   OURDOMAIN \ ourwebserver $已被使用。

这是我想要的行为,但没有得到它,这就是我在这个问题中提出的问题 - 我不想授予DOMAIN\MACHINE-NAME$登录SQL Server的权限。引用https://stackoverflow.com/a/15445280/147530

  

然而,我认为这是一个坏主意,因为它授权任何程序   以NetworkService身份运行以访问数据库 - 而不仅仅是您的网络   应用

我还尝试了一件事,即使用此链接http://www.iis.net/learn/install/installing-iis-85/installing-iis-85-on-windows-server-2012-r2#ModulesinIIS85在IIS8上启用Windows身份验证,但这也无法解决问题。

1 个答案:

答案 0 :(得分:2)

修正了这个问题。在SSMS中,有一个路径machine -> security -> logins,其中包含可以登录到计算机的用户。我没有将apppool添加到此列表中。我只将apppool添加到machine -> databases -> my database -> security -> users