ASP.NET 中的進(jìn)程和請求標(biāo)識(shí)
本文的發(fā)布號(hào)曾為 CHS317012
本頁概要本文概述向默認(rèn)的進(jìn)程帳戶授予的訪問權(quán)限并描述這些權(quán)限可能對于某些任務(wù)限制過嚴(yán)的一些情況。
在 Microsoft Windows 2000 和 Microsoft Windows XP 上的 ASP.NET 的默認(rèn)安裝中,ASP.NET 在輔助進(jìn)程中運(yùn)行 Web 應(yīng)用程序代碼。默認(rèn)情況下,此進(jìn)程的標(biāo)識(shí)使用名為 ASPNET 帳戶(全名是 aspnet_wp 帳戶)的本地帳戶。在 ASP.NET 的試用版中,該進(jìn)程標(biāo)識(shí)為 System,這是一個(gè)功能強(qiáng)大的、對計(jì)算機(jī)具有許多訪問權(quán)限的管理帳戶。為了提供特權(quán)較少的默認(rèn)安裝,ASP.NET 的發(fā)行版本使用權(quán)限較小的 ASPNET 帳戶,該帳戶適合于大多數(shù) Web 應(yīng)用程序。 注意:默認(rèn)情況下,如果使用 Microsoft Internet 信息服務(wù) (IIS) 6.0,則 ASP.NET Web 應(yīng)用程序?qū)⑦\(yùn)行在 NetworkService 帳戶的安全上下文中。 更多信息配置進(jìn)程標(biāo)識(shí)您可以在安裝根目錄的 Config 子目錄中的 Machine.config 文件的 <processModel> 部分配置進(jìn)程標(biāo)識(shí)。userName 和 password 屬性可控制進(jìn)程標(biāo)識(shí)。這些屬性的默認(rèn)值如下所示:
machine 和 AutoGenerate 值指示 ASP.NET 使用內(nèi)置的 ASPNET 帳戶并為該帳戶使用保密性強(qiáng)的存儲(chǔ)于本地安全機(jī)構(gòu) (LSA) 中的隨機(jī)密碼。如果您要使用具有更多訪問權(quán)限的進(jìn)程,則可以將 userName 屬性設(shè)置為 System,這將導(dǎo)致 ASP.NET 輔助進(jìn)程使用與 Inetinfo.exe 進(jìn)程相同的標(biāo)識(shí)運(yùn)行。Inetinfo.exe 進(jìn)程默認(rèn)情況下以 System 標(biāo)識(shí)運(yùn)行。在您配置 ASP.NET 輔助進(jìn)程以使用 System 標(biāo)識(shí)時(shí),該 ASP.NET 輔助進(jìn)程可以訪問本地計(jì)算機(jī)上的幾乎所有資源。在運(yùn)行 Windows 2000 或 Windows XP 的計(jì)算機(jī)上,System 帳戶還具有網(wǎng)絡(luò)憑據(jù)并可以作為計(jì)算機(jī)帳戶訪問網(wǎng)絡(luò)資源。 要配置進(jìn)程使之以 System 標(biāo)識(shí)運(yùn)行,請按以下方式更改 <processModel> 部分的 userName 屬性:
ASPNET 帳戶的默認(rèn)權(quán)限在安裝 ASP.NET 時(shí),將作為本地帳戶創(chuàng)建 ASPNET 帳戶。ASPNET 帳戶僅屬于該計(jì)算機(jī)上的用戶組。因此,ASPNET 帳戶具有與用戶組關(guān)聯(lián)的所有權(quán)限,并且可以訪問用戶組對其具有訪問權(quán)限的任何資源。ASPNET 帳戶從用戶組繼承了以下用戶權(quán)限:
下表列出了 ASPNET 帳戶所需的“訪問控制列表”(ACL)。Windows 2000 和 Microsoft .NET Framework 的默認(rèn)安裝包含這些訪問控制列表。
注意:默認(rèn)情況下,ASPNET 帳戶通常不具有用來執(zhí)行在本文中描述的某些任務(wù)的正確訪問權(quán)限。 訪問資源以下幾節(jié)介紹如何使用各種資源。如果您啟用模擬并且向模擬的帳戶授予對資源的訪問權(quán)限,則可以本地訪問其中的許多資源。但是,在您嘗試訪問遠(yuǎn)程資源時(shí),模擬通常不起作用,除非應(yīng)用程序使用可委派的身份驗(yàn)證機(jī)制,例如 Kerberos 或基本身份驗(yàn)證。您還可以使用 COM+ 服務(wù)訪問資源,這在用固定標(biāo)識(shí)運(yùn)行代碼 一節(jié)中作了概述。使用文件資源要使通過 ASPNET 帳戶運(yùn)行的應(yīng)用程序能夠向文件寫入,您可以在向文件寫入之前,在代碼中模擬特定的用戶。或者您可以授予 ASPNET 帳戶寫權(quán)限。您可以授予對單個(gè)文件或目錄層次結(jié)構(gòu)的寫權(quán)限。重要說明:當(dāng)您將單個(gè)文件或目錄層次結(jié)構(gòu)的寫權(quán)限授予 ASPNET 帳戶時(shí),所有在服務(wù)器上使用 ASPNET 帳戶運(yùn)行的 ASP.NET Web 應(yīng)用程序也可以向此文件或目錄層次結(jié)構(gòu)寫入。 有關(guān)在代碼中模擬特定用戶的更多信息,請單擊下面的文章編號(hào),以查看 Microsoft 知識(shí)庫中相應(yīng)的文章: 306158 (http://support.microsoft.com/kb/306158/) 如何在 ASP.NET 應(yīng)用程序中實(shí)現(xiàn)模擬
要更改文件的訪問控制列表,請按照下列步驟操作:
ASP.NET 1.1 使用 <DriveName>\Documents and Settings\<MachineName>\ASPNET 文件夾來存儲(chǔ)進(jìn)程文件(其中 <DriveName> 是計(jì)算機(jī)上安裝 ASP.NET 的驅(qū)動(dòng)器,<MachineName> 是計(jì)算機(jī)的名稱)。 啟用模擬使用模擬,可在請求實(shí)體的安全上下文中運(yùn)行,既可以作為經(jīng)過身份驗(yàn)證的用戶也可以作為匿名用戶運(yùn)行。在 ASP.NET 中,模擬是可選的,默認(rèn)情況下不啟用。要在計(jì)算機(jī)或應(yīng)用程序級(jí)別啟用模擬,請?jiān)?Machine.config 或 Web.config 文件的 <system.web> 部分添加以下配置指令:
使用數(shù)據(jù)庫使用 SQL 身份驗(yàn)證連接到數(shù)據(jù)庫的應(yīng)用程序通常不受切換到 ASPNET 帳戶的影響。使用集成身份驗(yàn)證和模擬的應(yīng)用程序也是如此。但是,如果應(yīng)用程序沒有模擬并且正使用 Windows 身份驗(yàn)證,則您必須為 ASPNET 帳戶授予對數(shù)據(jù)庫的訪問權(quán)限。在嘗試通過命名管道使用集成的 Windows 身份驗(yàn)證向 Microsoft SQL Server 驗(yàn)證身份時(shí),您不能使用 ASPNET 帳戶。但是,您可以通過傳輸控制協(xié)議 (TCP) 傳輸成功地讓 ASPNET 帳戶使用集成的 Windows 身份驗(yàn)證。 如果應(yīng)用程序必須使用 Microsoft Access 數(shù)據(jù)庫,則 ASPNET 帳戶必須能夠?qū)懭霐?shù)據(jù)庫文件。管理員必須相應(yīng)地調(diào)整文件權(quán)限。 使用事件日志必須向應(yīng)用程序事件日志中寫入事件的應(yīng)用程序,在其使用 ASPNET 帳戶運(yùn)行時(shí)能夠向事件日志中寫入。如果應(yīng)用程序必須創(chuàng)建新的事件日志類別,則該應(yīng)用程序必須在 HKEY_LOCAL_MACHINE 注冊表配置單元下創(chuàng)建一個(gè)注冊表項(xiàng),而 ASPNET 帳戶無法做到這一點(diǎn)。要在運(yùn)行時(shí)創(chuàng)建類別,您必須啟用模擬,然后模擬一個(gè)具有更多訪問權(quán)限的帳戶?;蛘?,可以讓管理員創(chuàng)建該類別,這樣應(yīng)用程序就可以在運(yùn)行時(shí)寫入該類別。 如果應(yīng)用程序必須創(chuàng)建新事件日志類別,請?jiān)诎惭b時(shí)創(chuàng)建這些類別。在創(chuàng)建該類別后,ASPNET 帳戶就可以寫入應(yīng)用程序事件日志了。 使用 System.DirectoryServices 和 Active Directory如果 Web 應(yīng)用程序必須訪問 Active Directory,那么該應(yīng)用程序可以在支持委派的環(huán)境中使用模擬。或者,該應(yīng)用程序可向 System.DirectoryServices 命名空間中的 DirectoryEntry 構(gòu)造函數(shù)提供顯式憑據(jù)以訪問 Active Directory。如果應(yīng)用程序使用顯式憑據(jù),則應(yīng)用程序應(yīng)該相應(yīng)地使用諸如 COM+ 構(gòu)造字符串或 Windows 數(shù)據(jù)保護(hù)應(yīng)用程序編程接口 (API) 一類的技術(shù)存儲(chǔ)憑據(jù)。使用性能計(jì)數(shù)器ASPNET 帳戶具有足夠的權(quán)限向性能計(jì)數(shù)器數(shù)據(jù)中寫入(但沒有讀取權(quán)限)。如果應(yīng)用程序必須讀取性能計(jì)數(shù)器數(shù)據(jù)或創(chuàng)建性能計(jì)數(shù)器類別,則管理員或高級(jí)用戶權(quán)限是必需的。如果應(yīng)用程序必須創(chuàng)建新的性能計(jì)數(shù)器類別,則在安裝時(shí)創(chuàng)建這些類別。在創(chuàng)建這些類別后,ASPNET 帳戶可以向計(jì)數(shù)器中寫入。 您在使用 ASPNET 帳戶時(shí)仍可以使用性能監(jiān)視器工具 (Perfmon.exe) 監(jiān)視 ASP.NET 性能計(jì)數(shù)器。 在 Windows 2000 中,請按照下列步驟操作:
啟動(dòng)進(jìn)程外 COM 服務(wù)器在作為 ASPNET 帳戶運(yùn)行時(shí)必須啟動(dòng)進(jìn)程外 COM 服務(wù)器的應(yīng)用程序可以使用 Dcomcnfg.exe 工具專門向該帳戶授予啟動(dòng)權(quán)限。調(diào)試問題默認(rèn)情況下,您不能從客戶端應(yīng)用程序逐句執(zhí)行 XML Web 服務(wù)調(diào)用。要逐句執(zhí)行 XML Web 服務(wù),您必須將 ASPNET 帳戶添加到正運(yùn)行 XML Web 服務(wù)的計(jì)算機(jī)上的“調(diào)試器用戶”組。用固定標(biāo)識(shí)運(yùn)行代碼在 COM+ 服務(wù)中,您可以用固定標(biāo)識(shí)運(yùn)行代碼。您可以使用 System.EnterpriseServices 命名空間的 ServicedComponent 類來編寫利用 COM+ 服務(wù)的托管代碼組件。您可以在從 ServicedComponent 派生出的一個(gè)類中包含特權(quán)功能,然后作為一個(gè)具有配置的標(biāo)識(shí)的 COM+ 服務(wù)器應(yīng)用程序運(yùn)行此類。在 UNC 共享上編譯代碼隱藏文件在 ASP.NET 中,您可以使用幾種方法開發(fā)應(yīng)用程序文件:
在主域控制器或備份域控制器上使用 ASP.NET默認(rèn)情況下,如果在域控制器上使用 ASP.NET 1.1,則 ASP.NET Web 應(yīng)用程序?qū)⑦\(yùn)行在 IWAM_<ComputerName> 帳戶的安全上下文中(其中 <ComputerName> 是計(jì)算機(jī)的名稱)。 有關(guān)其他信息,請單擊下面的文章編號(hào),以查看 Microsoft 知識(shí)庫中相應(yīng)的文章: 315158 (http://support.microsoft.com/kb/315158/) FIX:ASP.NET 在域控制器上使用默認(rèn) ASPNET 帳戶不能正常運(yùn)行
返回頁首
讀取 IIS 元數(shù)據(jù)庫ASPNET 帳戶無法讀取 Microsoft Internet 信息服務(wù) (IIS) 元數(shù)據(jù)庫。如果應(yīng)用程序必須訪問元數(shù)據(jù)庫設(shè)置,則可以通過使用 Metaacl.exe 實(shí)用工具,有選擇地向元數(shù)據(jù)庫節(jié)點(diǎn)授予讀訪問權(quán)限。如果應(yīng)用程序必須使用 .disco 文件(.disco 文件必須能夠讀取 IIS 元數(shù)據(jù)庫才可以提供發(fā)現(xiàn)服務(wù)),則必須為 ASPNET 帳戶授予對該元數(shù)據(jù)庫的讀訪問權(quán)限。 使用 System.Management 和 WMIWindows Management Instrumentation (WMI) 具有強(qiáng)大的管理功能,您可以用它來管理和監(jiān)視基于 Windows 的計(jì)算機(jī)。但是,當(dāng) ASP.NET 應(yīng)用程序以 ASPNET 帳戶運(yùn)行時(shí),此帳戶只具有與“所有人”相同的默認(rèn)訪問權(quán)限。這些權(quán)限包括為本地計(jì)算機(jī)上的提供程序讀取 WMI 數(shù)據(jù)、寫入提供程序數(shù)據(jù)和執(zhí)行方法。有關(guān) WMI 安全機(jī)制的更多信息,請參見 WMI Platform SDK 文檔或 MSDN。注意:在沒有安裝 Service Pack 3 (SP3) 或更高版本的 Windows 2000 上,或者在沒有安裝 Service Pack 1 (SP1) 或更高版本的 Windows XP 上,在 ASPNET 帳戶下運(yùn)行的 ASP.NET Web 應(yīng)用程序可能無法運(yùn)行,并且您可能會(huì)收到“Access Denied (0x80041003)”(訪問被拒絕 (0x80041003))錯(cuò)誤信息。發(fā)生此錯(cuò)誤的原因是該帳戶不具有足夠的權(quán)限來訪問某些 WMI 命名空間。要解決此問題,請安裝 Windows XP SP1 或更高版本,或者安裝 Windows 2000 SP3 或更高版本。要變通解決此問題,請按照下列步驟操作:
與桌面交互當(dāng)將 IIS 服務(wù)配置成允許與桌面交互時(shí),ASPNET 帳戶會(huì)因?yàn)槟J(rèn)窗口站和桌面上的“自由選擇的訪問控制列表”(DACL) 而沒有訪問桌面的適當(dāng)權(quán)限??梢宰尮芾韱T更改這些 DACL,或者您可以使用有權(quán)訪問這些對象的帳戶運(yùn)行此進(jìn)程。刪除 ASP.NET當(dāng)您刪除 ASP.NET 時(shí),ASPNET 帳戶被禁用并繼續(xù)留在系統(tǒng)上。如果您不打算重新安裝 ASP.NET,則可以刪除 ASPNET 帳戶。如果在顯式刪除 ASPNET 帳戶之后重新安裝 ASP.NET,就會(huì)創(chuàng)建一個(gè)具有新的安全標(biāo)識(shí) (SID) 的新 ASPNET 帳戶。因此,任何指向以前 ASPNET 帳戶的 ACL 將都不再適用于這個(gè)新的 ASPNET 帳戶。 參考有關(guān) Windows 2000 中默認(rèn)的訪問控制列表的更多信息,請參見下面的 Microsoft 白皮書:
http://www.microsoft.com/windows2000/docs/SecDefs.doc (http://www.microsoft.com/windows2000/docs/secdefs.doc)
有關(guān)其他信息,請單擊下面的文章編號(hào),以查看 Microsoft 知識(shí)庫中相應(yīng)的文章:
329290 (http://support.microsoft.com/kb/329290/) 如何使用 ASP.NET 工具加密憑據(jù)和會(huì)話狀態(tài)連接字符串
315158 (http://support.microsoft.com/kb/315158/) FIX:ASP.NET 在域控制器上使用默認(rèn) ASPNET 帳戶不能正常運(yùn)行
|
|