那是因为这是两回事。IIS_IUSRS是IIS工作进程帐户的组。这意味着应用程序池本身将以其身份运行。IUSR是匿名用户身份。这意味着IIS认为是正在访问该站点的用户的身份。
现在,即使您没有说出来,也让我猜猜-这个应用是经典的ASP吗?(否则,如果它是.Net,则必须使用模拟)。无论哪种方式,发生的都是将资源作为模拟身份(在您的情况下为匿名用户)(即IUSR)进行访问。因此,您必须授予它权利。在.Net中,如果关闭模拟,您将发现IIS_IUSRS将按预期发挥作用。在Classic ASP(和静态文件)中,您别无选择,模拟始终处于“启用”状态。因此,它始终是所使用的用户身份,而不是池身份。因此,由于IIS_IUSRS用于池标识,因此它不在起作用。
OP添加更多信息后进行编辑:
由于名称很容易混淆IUSR和IIS_IUSRS。要了解它们的不同之处,请记住IIS_IUSRS替代了IIS6(即工作进程组)中的IIS_WPG。向这些组添加您要在其下运行池的帐户,而不是匿名身份,匿名权限应该受到更多限制。例如。有时,您可能想使用域帐户来运行池,以便将kerberos委派给其他网络资源。然后,您可以将该服务帐户添加到该组中。
启用模拟后,由于被告知要假装池/进程,因此它假装为用户。如果是匿名身份验证(您的情况),则该用户为IUSR。如果是Windows身份验证,则将是用户的Windows \域标识。这也是为什么模拟会导致性能下降的原因,因为该过程必须切换到其他身份进行资源访问。
如果您使用的是.NET和匿名身份验证,那么我不明白为什么您要启用模拟功能。如果您不使用或不需要模拟,则在使用IIS7时应注意一些更多的技巧:您可以使IUSR完全消失并消除所有混乱。我想您会喜欢,这也是我的首选方法。您需要做的就是告诉它将池标识重新用作匿名标识。
因此,在此之后,您只需要处理IIS_IUSRS组即可。但是请不要感到困惑,这仍然并不意味着这两个是相同的!进程标识可以代替IUSR,但反之则不行!
还有一些需要注意的IIS7技巧:如果您查看IIS_IUSRS,它可能为空。那是因为您的虚拟池标识会在池启动时自动添加到其中,因此您不必担心这些事情。
该表应有助于更好地阐明如何确定线程执行身份:
匿名访问的匿名访问资源
启用在IIS5 / 6中启用IUSR_computer或
IIS7中的IUSR,或
如果您更改了匿名用户帐户
在IIS中,无论您在哪里设置
启用禁用MYDOM \ MyName
禁用启用NT Authority \ Network服务(池标识)
禁用禁用NT Authority \ Network服务(池标识)