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

Max*_*Max 222 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安全性中使用该帐户...)

谢谢你的帮助!

dp.*_*dp. 364

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

我是如何让它工作的:

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

只要AppPool名称确实存在,就应该创建登录名.

  • 微软有用,但令人兴奋(和疯狂)的微软. (32认同)
  • 哇.步骤3中的"不点击搜索"似乎有所作为(?) (15认同)
  • apppool账户只能在同一台机器上运行! (15认同)
  • 如果SQL服务器实例在另一台服务器上,这不会失败吗?例如 - `SQL1`如何知道`WEB1`上的本地/虚拟`IIS AppPool\MyAppPool`? (14认同)
  • 很抱歉复活旧帖子,但有人知道这样做是否会对现场环境产生任何安全隐患? (4认同)
  • @DanB 是的,有一个解决方案:改用域帐户。IIS AppPool 帐户是本地帐户。您需要创建一个域帐户并将您的 IIS AppPool 设置为使用域帐户登录。 (3认同)
  • 如果你的Web服务器和SQL Server在不同的机器上,有没有解决方案!! ?? 我可以找到登录,但我无法创建新的SQL登录.(如果我不做检查名称......它仍然不起作用) (2认同)
  • 谢谢 - 我通过反复试验弄清楚了...盔甲中真正的缝隙是在IIS的网站配置编辑器中的一个鲜为人知的设置部分:system.webServer/security/authentication/windowsAuthentication来自:ApplicationHost .config <locationpath ='ServerName/SiteName'/>名为useAppPoolCredentials(默认情况下设置为False.将此设置为True,再次生效变得很棒!!!很难找到...... (2认同)

Rya*_*hel 58

CREATE LOGIN [IIS APPPOOL\MyAppPool] FROM WINDOWS;
CREATE USER MyAppPoolUser FOR LOGIN [IIS APPPOOL\MyAppPool];
Run Code Online (Sandbox Code Playgroud)

  • 请注意像我这样的新手:确保对您希望使用IIS应用程序池访问的数据库执行此查询,第二个语句位于数据库级别.您可能需要使用户成为某些数据库角色的成员,并授予他对架构(例如`dbo`)的权限. (4认同)
  • 您可能需要将角色“db_owner”添加到新创建的用户“MyAppPoolUser”以避免权限问题:“ALTER ROLE db_owner ADD MEMBER [MyAppPoolUser]” (2认同)

Gok*_*gan 7

可以这样解决

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

如果这样做,则不需要在数据库中创建用户。

  • 虽然这在开发环境中可行,但我永远不会在生产中这样做,因为 IIS AppPool 用户对其可以访问的内容有严格的设计限制。更改为具有“AUTHORITY\SYSTEM”和“BUILTIN\Administrators”的帐户会给面向外部的网站提供过多的系统访问权限。https://learn.microsoft.com/en-us/troubleshoot/iis/understanding-identities https://learn.microsoft.com/en-us/windows/win32/services/localsystem-account (4认同)

Dav*_*kle 6

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


Ste*_*ven 6

作为附注,使用虚拟帐户(NT Service\MyService和IIS AppPool\MyAppPool)的流程仍然在"NETWORK SERVICE"帐户下运行,如本文建议http://www.adopenstatic.com/cs/blogs/ken/ archive/2008/01/29/15759.aspx.唯一的区别是,这些过程是成员的"NT服务\为MyService"或"IIS程序池\ MyAppPool"基团的(因为这些实际上是基团和用户).这也是为什么流程在网络上以与NETWORK SERVICE帐户相同的方式在机器上进行身份验证的原因.

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

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


Ric*_*nez 5

请参阅: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>'
Run Code Online (Sandbox Code Playgroud)