基本问题:
我有一个Web应用程序访问同一台机器上的SQL Server数据库。网络应用程序在自己的应用程序池下运行 - 我们称之为MyAppPool
。如果我在IIS管理器中转到高级设置,我可以看到MyAppPool
在ApplicationPoolIdentity
下运行。当我向网络应用发出请求时,我可以打开任务管理器并验证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身份验证,但这也无法解决问题。
答案 0 :(得分:2)
修正了这个问题。在SSMS中,有一个路径machine -> security -> logins
,其中包含可以登录到计算机的用户。我没有将apppool
添加到此列表中。我只将apppool
添加到machine -> databases -> my database -> security -> users