IIS 6.0权限问题

我对两个账户之间的差异感到困惑,

  • 应用程序池将在其上运行的Windows帐户;
  • 当我们使用匿名访问一个Web应用程序到IIS时,相关的映射Windows帐户。

有什么区别?

我正在使用Windows Server 2003 x64 + IIS 6.0。

在此先感谢乔治

这有点混淆不是。 首先,匿名访问帐户已经存在了很长时间,应用程序池的想法在IIS 6中是新的。我认为(尽pipe我没有证据),如果IIS是从头开始devise的,这不是这样设置,感觉就像保持兼容性。

应用程序池帐户需要在服务器上有一定的权限。 通常通过将帐户添加到IIS_WPG本地组来授予这些权限。
匿名访问帐户不需要这些权限。
假设您的网站设置为允许匿名访问,那么您的页面运行的帐户将由Web应用程序的模拟设置决定。 如果模拟打开,则该请求将作为匿名帐户处理。 另一方面,如果impersonate被closures,则请求将作为应用程序池帐户运行,而不pipe身份validation设置如何。
如果您不需要模拟,那么如果您closures它,您将获得稍微更好的吞吐量。 我还认为,如果页面请求作为应用程序池运行,而不是在进程中涉及另一个帐户,则更容易遵循。

我已经为公司内部网写了一些小的Web应用程序。 这些倾向于使用Windows身份validation,以便ASP知道谁正在访问页面,但不要模拟,所以请求作为应用程序池运行。 这允许数据库访问运行为一个Windows帐户,使pipe理更容易(海事组织),并保持我们的DBA快乐。
一个不需要知道谁在运行它的站点会打开匿名访问,但保持closures模拟状态。

编辑:进一步阅读。
快速searchMSDN发现这篇文章可能有帮助。 我还发现了这两篇关于IIS 7中的情况如何变化的文章。
他们似乎支持我的理论,即现在IIS不支持匿名访问帐户,IIS支持应用程序池。

编辑:关于模仿
如果web.config中没有设置,ASP.NET将使用machine.config中的设置。 有关各种configuration文件如何交互的更多信息在这里

我是一个新用户,并没有足够的声誉点评论,所以希望这样回答是好的。 大讨论。 我想我会插入一些评论。

pipTheGeek,正如你所指出的,这在IIS7中更好。 您可以将网站设置为始终只使用应用程序池标识。 那么你不需要再维护2个用户了。 如果每个应用程序池有一个网站,或者同一个应用程序池中的所有网站彼此信任,则这非常棒。

IIS_ WPG(没有空格,该文本序列使其斜体)是一个要求,并不是模拟的考虑因素。 在IIS6中,如果不将用户添加到IIS_ WPG组,则不能将其用作应用程序池的标识。 应用程序池将在第一次尝试使用它时失败。 在IIS7中,用户被自动注入到IIS_ WPG中,所以你不需要担心。

在模仿方面,没有遵循100%的规定,所以您至less需要对应用程序池标识和匿名或已validation用户的读取权限。 例如,如果您为SQL Server连接string使用Windows身份validation,则将始终使用RevertToSelf并使用应用程序池身份而不是匿名(或已validation身份)的用户身份。

乔治,确认你是否有假冒套装,请使用www.sysinternals.com的processmonitor。 这样你就可以看到磁盘上正在使用什么,并且一行的属性会显示你是否模拟。 这是一个免费的工具,可以安全地在生产服务器上进行,而且易于学习。

模拟默认情况下是不启用的,所以如果你没有在你的web.config中看到它,它可能还没有。 但是,如果您不是服务器pipe理员,请检查根目录web.config和machine.config,在\ config文件夹中确认没有设置。 search单词“impersonate”。

另一方面,无论何时您看到关于ASPNET用户的文档,都将其视为旧的和IIS5的。 它在IIS6,7中的真正含义是应用程序池标识用户。