我正在运行一个带有集成管道模式 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安全中使用该帐户...)
谢谢你的帮助!
“IIS APPPOOL\AppPoolName”会起作用,但如前所述,它似乎不是有效的 AD 名称,因此当您在“选择用户或组”对话框中搜索它时,它不会显示(实际上,它会找到它,但它会认为它是一个实际的系统帐户,它会尝试这样对待它......这是行不通的,并且会给你关于它找不到的错误消息)。
我如何让它工作是:
在 SQL Server Management Studio 中,查找安全文件夹(与数据库、服务器对象等文件夹处于同一级别的安全文件夹...而不是每个单独数据库中的安全文件夹)右键单击登录名并选择“新建登录名”在登录名字段中,键入 IIS APPPOOL\YourAppPoolName - 不要单击搜索填写您喜欢的任何其他值(即身份验证类型、默认数据库等)单击确定
只要 AppPool 名称实际存在,现在就应该创建登录。
CREATE LOGIN [IIS APPPOOL\MyAppPool] FROM WINDOWS;
CREATE USER MyAppPoolUser FOR LOGIN [IIS APPPOOL\MyAppPool];
dbo
)的权限。
db_owner
添加到新创建的用户 MyAppPoolUser
以避免权限问题:ALTER ROLE db_owner ADD MEMBER [MyAppPoolUser]
可以这样解决
打开“应用程序池”,您应该右键单击已选择应用程序池。然后选择“高级设置”。单击“身份”选项卡上的三个点,然后您应该从“内置帐户”字段中选择“本地系统”
如果这样做,则无需在数据库中创建用户。
如果您要跨机器运行,则需要使用网络服务、本地系统、域帐户或 SQL 2008 R2(如果有)托管服务帐户(如果您有这样的基础设施,这是我的偏好) .您不能使用对 Active Directory 域不可见的帐户。
作为旁注,使用虚拟帐户(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”的权限。
如果有人有更准确或矛盾的信息,请发布。
看: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>'
这可能是您正在寻找的...
http://technet.microsoft.com/en-us/library/cc730708%28WS.10%29.aspx
我还建议长期考虑有限权限的域用户,您正在尝试的内容在孤岛机器场景中运行良好,但如果您将数据库服务器移至另一台机器,您将不得不进行更改。
我通过反复试验找到了答案...盔甲中真正的裂缝是 IIS 中 Configuration Editor
中网站的一个鲜为人知的设置
Section: system.webServer/security/authentication/windowsAuthentication
From: ApplicationHost.config <locationpath='ServerName/SiteName' />
称为useAppPoolCredentials
(默认设置为False
。将此设置为True
,生活再次变得美好!!!希望这可以为下一个人节省痛苦......
https://i.stack.imgur.com/YZHwc.png
就我而言,问题是我开始使用 Visual Studio/Episerver 扩展从头开始创建一个 MVC Alloy 示例项目,并且在使用本地 Visual Studio iis express 执行时它运行良好。但是,默认情况下,它将 sql 数据库指向 LocalDB,当我将站点部署到本地 IIS 时,它开始出现错误,我通过以下方式解决了一些初始错误: 1.将本地站点 url 绑定添加到 C:/Windows/System32/drivers/ etc/hosts 2. 然后通过编辑 application.config 在使用 Visual Studio 运行站点时右键单击屏幕右下角的 IIS express 找到文件位置,并在那里为本地 iis url 添加绑定。 3. 最后,我遇到了“无法访问数据库错误”,为此我在 Sql express 中创建了一个空白的新数据库,并在 Web 配置中更改了连接字符串以指向我的新数据库,然后在包管理器控制台(使用 Visual Studio)中执行Episerver DB 命令,例如 - 1. initialize-epidatabase 2. update-epidatabase 3. Convert-EPiDatabaseToUtc
对于 ApplicationPoolIdentity
,将 MSSQL 中的登录名/用户添加为 IIS_IUSRS
,对应于默认池。
不定期副业成功案例分享
SQL1
如何知道WEB1
上的本地/虚拟IIS AppPool\MyAppPool
?