我正在运行一个带有集成管道模式应用程序池的IIS7网站。AppPools不在NetworkService等下运行。标识(按用途),但使用它自己的AppPool标识(IIS AppPoolMyAppPool)。
这是所谓的服务帐户或虚拟帐户。(不是完整帐户的用户帐户…)
我想授予此服务帐户(IIS AppPoolMyAppPool)连接到我的SQL Server 2008 Express(在混合身份验证中运行)的权限。模式)。
虽然SQL Server可以添加任何普通用户帐户,但无法将IIS AppPoolMyAppPool虚拟帐户添加到有效的登录中(SQL Server表示找不到该帐户)。
是否有任何技巧,我需要启用什么才能使虚拟帐户工作?(根据taskmgr,w3wp.exe进程在此标识下运行,但我也不能在ntfs安全性中使用该帐户…)
谢谢你的帮助!
"IIS AppPoolAppPoolName"可以使用,但如前所述,它似乎不是有效的广告名称,因此当您在"选择用户或组"对话框中搜索它时,它不会显示(实际上,它会找到它,但它会认为它是一个实际的系统帐户,它会尝试将其视为……这将不起作用,并会给您找不到有关它的错误消息)。
我是如何让它发挥作用的:
在SQL Server Management Studio中,查找安全文件夹(与数据库、服务器对象等文件夹处于同一级别的安全文件夹…而不是每个数据库中的安全文件夹)
右键单击"登录",然后选择"新建登录"
在"登录名"字段中,键入IIS AppPoolYourAppPoolName-不要单击"搜索"。
填充您喜欢的任何其他值(即身份验证类型、默认数据库等)。
单击确定
只要AppPool名称实际存在,现在就应该创建登录。
- 很抱歉恢复了一个旧的帖子,但是有人知道这样做是否会对现场环境产生安全影响吗?
- 令人惊讶的帮助,但令人惊叹的(和糟糕的)微软。
- 哇。"不要点击搜索"在步骤3中似乎有区别(?)
- 如果SQL Server实例在另一台服务器上,这不会失败吗?例如,SQL1如何知道WEB1上的本地/虚拟IIS AppPool\MyAppPool?
- AppPool帐户只能在同一台计算机上工作!
- 即使我的数据库服务器与我的Web服务器在同一台计算机上,这对我来说也不起作用。登录失败。登录名来自不受信任的域,不能与Windows身份验证一起使用"。这与SQL Server 2008R2和Windows Server 2008R2一起使用
- 在连接字符串的数据源中使用(本地)时,这似乎不起作用。
- @内森:为我和(local)合作(2008年2月)。
- 这些服务帐户基于应用程序池的名称。如果更改应用程序池的名称会发生什么?服务帐户是否被重命名并保留权限,或者该帐户是否被替换,并且所有权限是否仍引用不存在的帐户?
- 我已经找了两天这样的解决方案了。还没试过,但可能会。我担心Windows安全更新会破坏这个功能,某天早上我上班的时候,会收到上百万封邮件抱怨网站关闭。投票赞成解决方案!!!!投票反对我冒这个险!!!!
- 如果您的Web服务器和SQL Server位于不同的计算机上,是否有任何解决方案?????我可以找到登录名,但无法创建新的SQL登录名。(如果我不检查姓名…它仍然不起作用)
- @Danb是的,有一个解决方案:改为使用域帐户。IIS应用程序池帐户是本地帐户。您需要创建一个域帐户,并将您的IIS应用程序池设置为使用域帐户登录。
- 谢谢你--我通过反复试验才知道…盔甲中的真正缺口是在名为useAppPoolCredentials的:applicationHost.config中的网站配置编辑器的第:system.webserver/security/authentication/windowsauthenticati‌&误8203;节中的IIS中鲜为人知的设置(默认情况下设置为false)。把它设为真,生活又变得伟大了!!!!很难找到…
- @Max和Nathan,——SQL服务器和网站不需要在同一台机器上……见2015年2月25日Reirab的注释…它确实有效…我用新信息编辑了最后的答案…希望这对大家都有帮助!!!!(我的编辑还没有发布,但我添加了一个新的答案与其他部分,使这项工作!!如果你有问题的话,请告诉我,因为一开始你很困惑…祝你好运!
- @ DP。我不明白。当我已经在web.config的连接字符串中提供了登录名和密码时,为什么需要创建登录名?为什么不使用web.config连接字符串?
- @usmankhalid这仅用于通过Windows身份验证连接到SQL Server。如果在连接字符串中指定了用户名和密码,则使用的是SQL Server帐户,即完全独立的帐户(包括密码),该帐户是在SQL Server中创建和维护的,而不是在SQL Server中简单授权的Active Directory帐户。
1 2
| CREATE LOGIN [IIS APPPOOL\MyAppPool] FROM WINDOWS;
CREATE USER MyAppPoolUser FOR LOGIN [IIS APPPOOL\MyAppPool]; |
- 很好-虽然接受的答案是正确的-我设法让自己在管理工作室不工作的情况下,所以这个原始的TSQL解决方案是我需要的。
- 注意像我这样的noobs:确保对您希望使用IIS应用程序池访问的数据库执行此查询,第二条语句位于数据库级别。您可能需要使用户成为某些数据库角色的成员,并授予他对模式(如dbo的)的权限。
作为旁注,使用虚拟帐户(NT servicemyservice和IIS apppoolmyapppool)的进程仍在"网络服务"帐户下运行,正如本文建议的那样http://www.adopenstatic.com/cs/blogs/ken/archive/2008/01/29/15759.aspx。唯一的区别是,这些进程是"NT servicemyservice"或"IIS AppPoolmyAppPool"组的成员(因为它们实际上是组,而不是用户)。这也是进程以网络服务帐户的方式在网络上进行身份验证的原因。
安全访问的方法不是依赖于没有网络服务特权的帐户,而是专门授予"NT servicemyservice"或"IIS AppPoolmyAppPool"更多权限,并在必要时删除"用户"的权限。
如果有人有更准确或矛盾的信息,请张贴。
如果您正在使用不同的机器,您要么需要使用网络服务、本地系统、域帐户,要么使用SQL 2008 R2(如果您有)托管服务帐户(如果您有这样的基础结构,这是我的首选)。不能使用对Active Directory域不可见的帐户。
查看:http://www.iis.net/learn/manage/configuring-security/application-pool-identities
1 2 3 4 5 6 7 8 9
| 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>' |
这可能是你要找的…
http://technet.microsoft.com/en-us/library/cc730708%28ws.10%29.aspx
我还建议考虑更长期的有限权限域用户,您在思洛机器方案中所尝试的工作正常,但如果您移到另一台用于DB服务器的机器上,则必须进行更改。
在我的例子中,问题是我开始使用Visual Studio/Episerver扩展从头开始创建一个MVC合金示例项目,当使用本地Visual Studio IIS Express执行时,它工作得很好。但是,默认情况下,它将SQL数据库指向localdb,当我将该站点部署到本地IIS时,它开始给出错误,我通过以下方式解决了一些初始错误:1.添加本地站点URL绑定到c:/windows/system32/drivers/etc/hosts2。然后,通过编辑application.config,在使用Visual Studio运行站点时,右键单击屏幕右角的IIS Express找到了文件位置,并为本地IIS URL添加了绑定。三。最后,我陷入了"无法访问数据库错误"的困境,为此,我在SQL Express中创建了一个空白的新数据库,并在web config中更改了连接字符串以指向我的新数据库,然后在包管理器控制台(使用Visual Studio)中执行了类似于-1。初始化epidatabase2。更新epidatabase三。转换epidatabasetoutc
我通过反复试验才知道…真正的盔甲缺口是一个鲜为人知的设置在iis中的Configuration Editor为网站在
Section: system.webServer/security/authentication/windowsAuthentication
From: ApplicationHost.config
称为useAppPoolCredentials(默认设置为False)。把这个放到True上,生活就又变得伟大了!!!!希望这能为下一个男人减轻痛苦…

- 我也遵循同样的过程,但问题没有得到解决。你一定也做过别的事,你能分享一下吗?
- @RSB-你是否遵循了所有其他步骤?您是否设置了应用程序池,并授予它们访问网站所在文件的权限?是否将服务器名称作为具有SQL Server权限的登录名添加?您是否以权限将AppPool应用到您的SQL Server?您是否修改了IIS以使用WindowsAuthentication?你犯了什么错误?它在您的开发环境中工作而不是在生产环境中工作吗?
- 我设置了AppPool,但如何授予他们访问网站所在文件的权限?如何将服务器名作为具有SQL Server权限的登录名添加?我还向具有权限的SQL Server添加了AppPool。如何修改IIS以使用WindowsAuthEntation。当IIS和SQL Server在同一台计算机上时,它在我的开发人员环境中工作,但它给出错误-System.ComponentModel.win32Exception:当IIS和SQL Server在不同的计算机上时,访问被拒绝错误。请建议。
- 如果你给我你的电子邮件,我会给你一个文件我做了如何做这一切…有太多的东西没法加在这里…
- @RSB我给你发了一封电子邮件。祝你好运。
- 非常感谢,会有很大帮助的。