将IIS 7 AppPool标识添加为SQL Server登录

时间:2009-12-19 15:06:35

标签: sql-server iis-7

我正在使用集成管道模式的AppPool运行IIS 7网站。 AppPools不在NetworkService等运行。身份(按用途),但使用它自己的AppPool Identitiy(IIS AppPool \ MyAppPool)。

这是一个所谓的服务帐户或虚拟帐户。 (用户帐户,不是完整帐户...)

我想授予此服务帐户(IIS AppPool \ MyAppPool)连接到我的SQL Server 2008 Express(以混合身份验证模式运行)的权限。

虽然SQL Server可以添加任何普通用户帐户,但IIS AppPool \ MyAppPool虚拟帐户无法添加到有效登录中(SQL Server表示无法找到该帐户)。

有什么技巧,我需要启用什么来使虚拟帐户工作? (根据taskmgr,w3wp.exe进程在此身份下运行,但我无法在NTFS安全性中使用该帐户...)

感谢您的帮助!

10 个答案:

答案 0 :(得分:354)

“IIS APPPOOL \ AppPoolName”将起作用,但如前所述,它似乎不是有效的AD名称,因此当您在“选择用户或组”对话框中搜索它时,它将不会显示up(实际上,它会找到它,但它会认为它是一个实际的系统帐户,并且会尝试将其视为......这将无法正常工作,并会向您提供有关未找到它的错误消息)

我是如何让它工作的:

  1. 在SQL Server Management Studio中,查找安全文件夹(与数据库,服务器对象等文件夹处于同一级别的安全文件夹...而不是每个单独数据库中的安全文件夹)
  2. 右键单击登录并选择“新登录”
  3. 在“登录名”字段中,键入 IIS APPPOOL \ YourAppPoolName - 不要单击搜索
  4. 填写您喜欢的任何其他值(即身份验证类型,默认数据库等)
  5. 点击确定
  6. 只要AppPool名称确实存在,就应该创建登录名。

答案 1 :(得分:56)

CREATE LOGIN [IIS APPPOOL\MyAppPool] FROM WINDOWS;
CREATE USER MyAppPoolUser FOR LOGIN [IIS APPPOOL\MyAppPool];

答案 2 :(得分:6)

如果你要跨越机器,你需要使用NETWORK SERVICE,LOCAL SYSTEM,域帐户或SQL 2008 R2(如果有的话)托管服务帐户(如果你有这样的话,这是我的偏好)基础设施)。您不能使用Active Directory域不可见的帐户。

答案 3 :(得分:6)

作为旁注,使用虚拟帐户(NT Service \ MyService和IIS AppPool \ MyAppPool)的流程仍在“NETWORK SERVICE”帐户下运行,因为此帖子建议http://www.adopenstatic.com/cs/blogs/ken/archive/2008/01/29/15759.aspx。唯一的区别是这些进程是“NT Service \ MyService”或“IIS AppPool \ MyAppPool”组的成员(因为这些组实际上是组,而不是用户)。这也是为什么流程在网络上以与NETWORK SERVICE帐户相同的方式在机器上进行身份验证的原因。

安全访问的方式不依赖于此帐户没有NETWORK SERVICE权限,而是专门授予“NT Service \ MyService”或“IIS AppPool \ MyAppPool”更多权限,并在必要时删除“Users”的权限

如果有人有更准确或矛盾的信息,请发帖。

答案 4 :(得分:3)

请注意:http://www.iis.net/learn/manage/configuring-security/application-pool-identities

USE master
GO
sp_grantlogin 'IIS APPPOOL\<AppPoolName>'

USE <yourdb>
GO
sp_grantdbaccess 'IIS APPPOOL\<AppPoolName>', '<AppPoolName>'
sp_addrolemember 'aspnet_Membership_FullAccess', '<AppPoolName>'
sp_addrolemember 'aspnet_Roles_FullAccess', '<AppPoolName>'

答案 5 :(得分:3)

您可以这样解决

  1. 打开“应用程序池”,
  2. 您应该右键单击已选择的应用程序池。然后选择 “高级设置”。
  3. 在“身份”选项卡上单击三点,然后应从“内置帐户”字段中选择“ LocalSystem”

如果采用这种方式,则无需在数据库中创建用户。

答案 6 :(得分:2)

这可能就是你要找的......

http://technet.microsoft.com/en-us/library/cc730708%28WS.10%29.aspx

我还建议长期考虑使用有限权限的域用户,您尝试的内容在竖井机器方案中正常工作,但如果您移动到另一台数据库服务器的计算机,则必须进行更改。

答案 7 :(得分:0)

我通过反复试验弄清楚......盔甲中真正的缝隙是IIS中Configuration Editor网站中的一个鲜为人知的设置

Section: system.webServer/security/authentication/windowsAuthentication

From: ApplicationHost.config <locationpath='ServerName/SiteName' />

名为useAppPoolCredentials(默认设置为False。将此设置为True,生活再次变得更好!!!希望这可以为下一个人节省痛苦....

enter image description here

答案 8 :(得分:0)

在我的情况下,问题是我开始使用Visual Studio / Episerver扩展从头开始创建MVC合金示例项目,并且在使用本地Visual Studio iis Express执行时可以正常工作。 但是,默认情况下,它将sql数据库指向LocalDB,当我将站点部署到本地IIS时,它开始出现错误,我通过以下方法解决了一些初始错误: 1.将本地站点的URL绑定添加到C:/ Windows / System32 / drivers / etc / hosts 2.然后,通过编辑application.config,在使用Visual Studio运行站点时,通过右键单击屏幕右上角的botton在屏幕右上角的IIS Express上找到文件位置,并在其中添加了本地iis URL的绑定。 3.最终,我陷入了“无法访问数据库错误”的困境,为此我在Sql express中创建了一个空白新数据库,并在Web配置中更改了连接字符串以指向我的新数据库,然后在程序包管理器控制台(使用Visual Studio)中执行了该操作Episerver DB命令,例如- 1.初始化表数据库 2. update-epidatabase 3. Convert-EPiDatabaseToUtc

答案 9 :(得分:0)

对于 ApplicationPoolIdentity,在 MSSQL 中添加一个登录/用户作为 IIS_IUSRS,与默认池相对应。