在 Windows 2008 R2 上,我可以为应用程序池的合成ApplicationPoolIdentity
帐户设置 NTFS 权限,如下所示:
ICACLS d:\websites\site1\www /grant "IIS AppPool\site1":(CI)(OI)(M)
该网站的应用程序池被命名为site1
并配置为 运行ApplicationPoolIdentity
。该网站的身份验证也配置为 进行身份验证ApplicationPoolIdentity
。我在 Windows 2008 Standard Edition R2 上已经做过一千次这样的操作,从来没有出过问题。
但是,如果我尝试在 Windows 2008 Standard Edition SP2 中执行相同操作,我会收到错误:
IIS AppPool\site1:未完成帐户名和安全 ID 之间的映射。 成功处理 0 个文件;处理 1 个文件失败
我还注意到,如果我尝试通过安全 GUI 设置应用程序池标识的权限,此操作也会失败。我以前见过这种情况,重新启动可以解决此问题,但我想知道为什么这种情况会定期发生。谷歌搜索表明其他人也遇到过此问题,但始终没有令人满意的解释。
为什么会这样?
答案1
嗨,Kevin。用于虚拟映射的 Windows 服务是“应用程序主机帮助服务”(AppHostSvc)。请仔细检查它是否运行正常,由于问题在重新启动后会自行解决,下次只需重新启动该服务,看看它是否能暂时解决问题。
听起来您知道,但在 R2 之前的版本中,您只能从命令行添加用户,但之后您可以从安全 GUI 对其进行“管理”(只要一切正常)。在 R2 中,您还可以通过输入全名(即 IIS AppPool\site1)在 GUI 中添加它。
答案2
我在另一台 Windows 2008 标准版 SP2 服务器(上面提到的服务器的基本映像)上进行了测试,但无法重现错误。
我重启了服务器,问题又神奇地解决了。我想明天我会向 MS PSS 提交故障单。
答案3
当我错误地输入 AppPool 用户(使用“/”而不是“\”)时,出现此错误:
icacls "e:\temp" /grant "IIS AppPool/Site1":(OI)(CI)F /T
更正用户名解决了该问题:
icacls "e:\temp" /grant "IIS AppPool\Site1":(OI)(CI)F /T