ASP.NET 中的进程和请求标识
本文的发布号曾为 CHS317012
本页概要本文概述向默认的进程帐户授予的访问权限并描述这些权限可能对于某些任务限制过严的一些情况。
在 Microsoft Windows 2000 和 Microsoft Windows XP 上的 ASP.NET 的默认安装中,ASP.NET 在辅助进程中运行 Web 应用程序代码。默认情况下,此进程的标识使用名为 ASPNET 帐户(全名是 aspnet_wp 帐户)的本地帐户。在 ASP.NET 的试用版中,该进程标识为 System,这是一个功能强大的、对计算机具有许多访问权限的管理帐户。为了提供特权较少的默认安装,ASP.NET 的发行版本使用权限较小的 ASPNET 帐户,该帐户适合于大多数 Web 应用程序。 注意:默认情况下,如果使用 Microsoft Internet 信息服务 (IIS) 6.0,则 ASP.NET Web 应用程序将运行在 NetworkService 帐户的安全上下文中。 更多信息配置进程标识您可以在安装根目录的 Config 子目录中的 Machine.config 文件的 <processModel> 部分配置进程标识。userName 和 password 属性可控制进程标识。这些属性的默认值如下所示:
machine 和 AutoGenerate 值指示 ASP.NET 使用内置的 ASPNET 帐户并为该帐户使用保密性强的存储于本地安全机构 (LSA) 中的随机密码。如果您要使用具有更多访问权限的进程,则可以将 userName 属性设置为 System,这将导致 ASP.NET 辅助进程使用与 Inetinfo.exe 进程相同的标识运行。Inetinfo.exe 进程默认情况下以 System 标识运行。在您配置 ASP.NET 辅助进程以使用 System 标识时,该 ASP.NET 辅助进程可以访问本地计算机上的几乎所有资源。在运行 Windows 2000 或 Windows XP 的计算机上,System 帐户还具有网络凭据并可以作为计算机帐户访问网络资源。 要配置进程使之以 System 标识运行,请按以下方式更改 <processModel> 部分的 userName 属性:
ASPNET 帐户的默认权限在安装 ASP.NET 时,将作为本地帐户创建 ASPNET 帐户。ASPNET 帐户仅属于该计算机上的用户组。因此,ASPNET 帐户具有与用户组关联的所有权限,并且可以访问用户组对其具有访问权限的任何资源。ASPNET 帐户从用户组继承了以下用户权限:
下表列出了 ASPNET 帐户所需的“访问控制列表”(ACL)。Windows 2000 和 Microsoft .NET Framework 的默认安装包含这些访问控制列表。
注意:默认情况下,ASPNET 帐户通常不具有用来执行在本文中描述的某些任务的正确访问权限。 访问资源以下几节介绍如何使用各种资源。如果您启用模拟并且向模拟的帐户授予对资源的访问权限,则可以本地访问其中的许多资源。但是,在您尝试访问远程资源时,模拟通常不起作用,除非应用程序使用可委派的身份验证机制,例如 Kerberos 或基本身份验证。您还可以使用 COM+ 服务访问资源,这在用固定标识运行代码 一节中作了概述。使用文件资源要使通过 ASPNET 帐户运行的应用程序能够向文件写入,您可以在向文件写入之前,在代码中模拟特定的用户。或者您可以授予 ASPNET 帐户写权限。您可以授予对单个文件或目录层次结构的写权限。重要说明:当您将单个文件或目录层次结构的写权限授予 ASPNET 帐户时,所有在服务器上使用 ASPNET 帐户运行的 ASP.NET Web 应用程序也可以向此文件或目录层次结构写入。 有关在代码中模拟特定用户的更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章: 306158 (http://support.microsoft.com/kb/306158/) 如何在 ASP.NET 应用程序中实现模拟
要更改文件的访问控制列表,请按照下列步骤操作:
ASP.NET 1.1 使用 <DriveName>\Documents and Settings\<MachineName>\ASPNET 文件夹来存储进程文件(其中 <DriveName> 是计算机上安装 ASP.NET 的驱动器,<MachineName> 是计算机的名称)。 启用模拟使用模拟,可在请求实体的安全上下文中运行,既可以作为经过身份验证的用户也可以作为匿名用户运行。在 ASP.NET 中,模拟是可选的,默认情况下不启用。要在计算机或应用程序级别启用模拟,请在 Machine.config 或 Web.config 文件的 <system.web> 部分添加以下配置指令:
使用数据库使用 SQL 身份验证连接到数据库的应用程序通常不受切换到 ASPNET 帐户的影响。使用集成身份验证和模拟的应用程序也是如此。但是,如果应用程序没有模拟并且正使用 Windows 身份验证,则您必须为 ASPNET 帐户授予对数据库的访问权限。在尝试通过命名管道使用集成的 Windows 身份验证向 Microsoft SQL Server 验证身份时,您不能使用 ASPNET 帐户。但是,您可以通过传输控制协议 (TCP) 传输成功地让 ASPNET 帐户使用集成的 Windows 身份验证。 如果应用程序必须使用 Microsoft Access 数据库,则 ASPNET 帐户必须能够写入数据库文件。管理员必须相应地调整文件权限。 使用事件日志必须向应用程序事件日志中写入事件的应用程序,在其使用 ASPNET 帐户运行时能够向事件日志中写入。如果应用程序必须创建新的事件日志类别,则该应用程序必须在 HKEY_LOCAL_MACHINE 注册表配置单元下创建一个注册表项,而 ASPNET 帐户无法做到这一点。要在运行时创建类别,您必须启用模拟,然后模拟一个具有更多访问权限的帐户。或者,可以让管理员创建该类别,这样应用程序就可以在运行时写入该类别。 如果应用程序必须创建新事件日志类别,请在安装时创建这些类别。在创建该类别后,ASPNET 帐户就可以写入应用程序事件日志了。 使用 System.DirectoryServices 和 Active Directory如果 Web 应用程序必须访问 Active Directory,那么该应用程序可以在支持委派的环境中使用模拟。或者,该应用程序可向 System.DirectoryServices 命名空间中的 DirectoryEntry 构造函数提供显式凭据以访问 Active Directory。如果应用程序使用显式凭据,则应用程序应该相应地使用诸如 COM+ 构造字符串或 Windows 数据保护应用程序编程接口 (API) 一类的技术存储凭据。使用性能计数器ASPNET 帐户具有足够的权限向性能计数器数据中写入(但没有读取权限)。如果应用程序必须读取性能计数器数据或创建性能计数器类别,则管理员或高级用户权限是必需的。如果应用程序必须创建新的性能计数器类别,则在安装时创建这些类别。在创建这些类别后,ASPNET 帐户可以向计数器中写入。 您在使用 ASPNET 帐户时仍可以使用性能监视器工具 (Perfmon.exe) 监视 ASP.NET 性能计数器。 在 Windows 2000 中,请按照下列步骤操作:
启动进程外 COM 服务器在作为 ASPNET 帐户运行时必须启动进程外 COM 服务器的应用程序可以使用 Dcomcnfg.exe 工具专门向该帐户授予启动权限。调试问题默认情况下,您不能从客户端应用程序逐句执行 XML Web 服务调用。要逐句执行 XML Web 服务,您必须将 ASPNET 帐户添加到正运行 XML Web 服务的计算机上的“调试器用户”组。用固定标识运行代码在 COM+ 服务中,您可以用固定标识运行代码。您可以使用 System.EnterpriseServices 命名空间的 ServicedComponent 类来编写利用 COM+ 服务的托管代码组件。您可以在从 ServicedComponent 派生出的一个类中包含特权功能,然后作为一个具有配置的标识的 COM+ 服务器应用程序运行此类。在 UNC 共享上编译代码隐藏文件在 ASP.NET 中,您可以使用几种方法开发应用程序文件:
在主域控制器或备份域控制器上使用 ASP.NET默认情况下,如果在域控制器上使用 ASP.NET 1.1,则 ASP.NET Web 应用程序将运行在 IWAM_<ComputerName> 帐户的安全上下文中(其中 <ComputerName> 是计算机的名称)。 有关其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章: 315158 (http://support.microsoft.com/kb/315158/) FIX:ASP.NET 在域控制器上使用默认 ASPNET 帐户不能正常运行
返回页首
读取 IIS 元数据库ASPNET 帐户无法读取 Microsoft Internet 信息服务 (IIS) 元数据库。如果应用程序必须访问元数据库设置,则可以通过使用 Metaacl.exe 实用工具,有选择地向元数据库节点授予读访问权限。如果应用程序必须使用 .disco 文件(.disco 文件必须能够读取 IIS 元数据库才可以提供发现服务),则必须为 ASPNET 帐户授予对该元数据库的读访问权限。 使用 System.Management 和 WMIWindows Management Instrumentation (WMI) 具有强大的管理功能,您可以用它来管理和监视基于 Windows 的计算机。但是,当 ASP.NET 应用程序以 ASPNET 帐户运行时,此帐户只具有与“所有人”相同的默认访问权限。这些权限包括为本地计算机上的提供程序读取 WMI 数据、写入提供程序数据和执行方法。有关 WMI 安全机制的更多信息,请参见 WMI Platform SDK 文档或 MSDN。注意:在没有安装 Service Pack 3 (SP3) 或更高版本的 Windows 2000 上,或者在没有安装 Service Pack 1 (SP1) 或更高版本的 Windows XP 上,在 ASPNET 帐户下运行的 ASP.NET Web 应用程序可能无法运行,并且您可能会收到“Access Denied (0x80041003)”(访问被拒绝 (0x80041003))错误信息。发生此错误的原因是该帐户不具有足够的权限来访问某些 WMI 命名空间。要解决此问题,请安装 Windows XP SP1 或更高版本,或者安装 Windows 2000 SP3 或更高版本。要变通解决此问题,请按照下列步骤操作:
与桌面交互当将 IIS 服务配置成允许与桌面交互时,ASPNET 帐户会因为默认窗口站和桌面上的“自由选择的访问控制列表”(DACL) 而没有访问桌面的适当权限。可以让管理员更改这些 DACL,或者您可以使用有权访问这些对象的帐户运行此进程。删除 ASP.NET当您删除 ASP.NET 时,ASPNET 帐户被禁用并继续留在系统上。如果您不打算重新安装 ASP.NET,则可以删除 ASPNET 帐户。如果在显式删除 ASPNET 帐户之后重新安装 ASP.NET,就会创建一个具有新的安全标识 (SID) 的新 ASPNET 帐户。因此,任何指向以前 ASPNET 帐户的 ACL 将都不再适用于这个新的 ASPNET 帐户。 参考有关 Windows 2000 中默认的访问控制列表的更多信息,请参见下面的 Microsoft 白皮书:
http://www.microsoft.com/windows2000/docs/SecDefs.doc (http://www.microsoft.com/windows2000/docs/secdefs.doc)
有关其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
329290 (http://support.microsoft.com/kb/329290/) 如何使用 ASP.NET 工具加密凭据和会话状态连接字符串
315158 (http://support.microsoft.com/kb/315158/) FIX:ASP.NET 在域控制器上使用默认 ASPNET 帐户不能正常运行
|
|