将IIS 7 AppPool身份添加为SQL Server登录


233

我正在运行带有集成管道模式 AppPool的IIS 7网站。AppPools不在NetworkService等身份下运行。(根据目的),但使用其自己的AppPool身份(IIS AppPool \ MyAppPool)。

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

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

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

有什么技巧可以使虚拟帐户正常工作吗?(根据taskmgr,w3wp.exe进程以该身份运行,但是我也无法在NTFS安全中使用该帐户...)

谢谢你的帮助!

Answers:


380

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

我如何使它工作的是:

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

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


4
很抱歉要复活一个旧帖子,但是有人知道在现场环境中这样做是否有任何安全隐患?
dooburt 2011年

34
很有帮助,但令人震惊(令人发指)Microsoftian。
伊万·纳格

16
哇。步骤3中的“请勿点击搜索”似乎有所不同(?)
Jedidja 2011年

16
如果SQL Server实例位于另一台服务器上,这不会失败吗?例如-如何做的SQL1关于本地/虚拟知道IIS AppPool\MyAppPoolWEB1
one.beat.consumer 2012年

3
如果您的Web服务器和SQL Server位于不同的计算机上,有什么解决方案!我可以找到登录名,但是无法创建新的SQL登录名。(如果我不做支票名称...它仍然不起作用)
Dan B

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

1
很好-尽管公认的答案是正确的-我设法使自己处于Management Studio无法正常工作的情况,因此我需要此原始TSQL解决方案。
Andrew Patterson

4
请注意像我这样的新手:确保对要使用IIS应用程序池访问的数据库执行此查询,第二条语句位于数据库级别。您可能需要使用户成为某些数据库角色的成员,并向他授予对模式的权限,例如dbo
MarioDS 2014年

一旦发现不可能通过SSMS GUI添加IIS APPPOOL登录名,就运行您的脚本。谢谢!曾经有可能-不是在SSMS 18中!我想这是现在的“功能”
MC9000

6

如果您要跨计算机访问,则需要使用NETWORK SERVICE,LOCAL SYSTEM,域帐户或SQL 2008 R2(如果有)托管服务帐户(如果拥有这样的基础结构,这是我的偏爱) 。您不能使用Active Directory域不可见的帐户。


6

附带说明一下,使用虚拟帐户(NT Service \ MyService和IIS AppPool \ MyAppPool)的进程仍在“ NETWORK SERVICE”帐户下运行,因为此帖子建议http://www.adopenstatic.com/cs/blogs/ken/存档/2008/01/29/15759.aspx。唯一的区别是,这些过程是成员的“NT服务\为MyService”或“IIS程序池\ MyAppPool”基团的(因为这些实际上是基团和用户)。这也是为什么进程以与网络服务帐户相同的方式在网络上作为计算机进行身份验证的原因。

安全访问的方法并不取决于没有NETWORK SERVICE特权的帐户,而是要授予“ NT Service \ MyService”或“ IIS AppPool \ MyAppPool”更多的权限,并在必要时删除“用户”的权限。

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




0

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

Section: system.webServer/security/authentication/windowsAuthentication

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

被称为useAppPoolCredentialsFalse默认设置为。将其设置为True,生活将再次变得美好!!希望这可以为下一个男人节省痛苦...。

在此处输入图片说明


我遵循相同的过程,但是问题没有解决。您也必须做其他事情,可以分享吗?
RSB 2015年

@RSB-您是否执行了所有其他步骤?您是否设置了appPools,并授予他们对网站所在文件的权限?您是否将服务器名称添加为具有SQL Server权限的登录名?您是否已将具有权限的appPool应用于SQL Server?您是否将IIS修改为使用WindowsAuthentication?您遇到什么错误?它在您的开发环境中有效,而不在生产环境中有效吗?
Dan B

我设置了appPool,但是如何授予他们访问网站所在文件的权限?如何添加服务器名称作为具有SQL Server权限的登录名?我还向具有权限的SQL Server添加了appPool。如何修改IIS以使用WindowsAuthentocation。当IIS和sql服务器位于同一台计算机上时,它可以在我的开发环境中工作,但是会给出error-System.ComponentModel.Win32Exception:当IIS和Sql服务器位于另一台计算机上时,访问被拒绝。请提出建议。
RSB 2015年

如果您给我您的电子邮件,我会给您发送我所做的有关所有操作的文档....此处内容太多,无法添加...
Dan B

@RSB我给您发送了一封电子邮件。祝好运。
Dan B

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 URL的绑定。3.最后,我陷入了“无法访问数据库错误”的困境

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.