ASP.NET 中的進(jìn)程和請(qǐng)求標(biāo)識(shí)
本文的發(fā)布號(hào)曾為 CHS317012
本頁概要本文概述向默認(rèn)的進(jìn)程帳戶授予的訪問權(quán)限并描述這些權(quán)限可能對(duì)于某些任務(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)大的、對(duì)計(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)行,請(qǐng)按以下方式更改 <processModel> 部分的 userName 屬性:
ASPNET 帳戶的默認(rèn)權(quán)限在安裝 ASP.NET 時(shí),將作為本地帳戶創(chuàng)建 ASPNET 帳戶。ASPNET 帳戶僅屬于該計(jì)算機(jī)上的用戶組。因此,ASPNET 帳戶具有與用戶組關(guān)聯(lián)的所有權(quán)限,并且可以訪問用戶組對(duì)其具有訪問權(quán)限的任何資源。ASPNET 帳戶從用戶組繼承了以下用戶權(quán)限:
下表列出了 ASPNET 帳戶所需的“訪問控制列表”(ACL)。Windows 2000 和 Microsoft .NET Framework 的默認(rèn)安裝包含這些訪問控制列表。
注意:默認(rèn)情況下,ASPNET 帳戶通常不具有用來執(zhí)行在本文中描述的某些任務(wù)的正確訪問權(quán)限。 訪問資源以下幾節(jié)介紹如何使用各種資源。如果您啟用模擬并且向模擬的帳戶授予對(duì)資源的訪問權(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)限。您可以授予對(duì)單個(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)在代碼中模擬特定用戶的更多信息,請(qǐng)單擊下面的文章編號(hào),以查看 Microsoft 知識(shí)庫中相應(yīng)的文章: 306158 (http://support.microsoft.com/kb/306158/) 如何在 ASP.NET 應(yīng)用程序中實(shí)現(xiàn)模擬
要更改文件的訪問控制列表,請(qǐng)按照下列步驟操作:
ASP.NET 1.1 使用 <DriveName>\Documents and Settings\<MachineName>\ASPNET 文件夾來存儲(chǔ)進(jìn)程文件(其中 <DriveName> 是計(jì)算機(jī)上安裝 ASP.NET 的驅(qū)動(dòng)器,<MachineName> 是計(jì)算機(jī)的名稱)。 啟用模擬使用模擬,可在請(qǐng)求實(shí)體的安全上下文中運(yùn)行,既可以作為經(jīng)過身份驗(yàn)證的用戶也可以作為匿名用戶運(yùn)行。在 ASP.NET 中,模擬是可選的,默認(rèn)情況下不啟用。要在計(jì)算機(jī)或應(yīng)用程序級(jí)別啟用模擬,請(qǐng)?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 帳戶授予對(duì)數(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 注冊(cè)表配置單元下創(chuàng)建一個(gè)注冊(cè)表項(xiàng),而 ASPNET 帳戶無法做到這一點(diǎn)。要在運(yùn)行時(shí)創(chuàng)建類別,您必須啟用模擬,然后模擬一個(gè)具有更多訪問權(quán)限的帳戶?;蛘撸梢宰尮芾韱T創(chuàng)建該類別,這樣應(yīng)用程序就可以在運(yùn)行時(shí)寫入該類別。 如果應(yīng)用程序必須創(chuàng)建新事件日志類別,請(qǐ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 中,請(qǐng)按照下列步驟操作:
啟動(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)其他信息,請(qǐng)單擊下面的文章編號(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 帳戶授予對(duì)該元數(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ī)制的更多信息,請(qǐng)參見 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 命名空間。要解決此問題,請(qǐng)安裝 Windows XP SP1 或更高版本,或者安裝 Windows 2000 SP3 或更高版本。要變通解決此問題,請(qǐng)按照下列步驟操作:
與桌面交互當(dāng)將 IIS 服務(wù)配置成允許與桌面交互時(shí),ASPNET 帳戶會(huì)因?yàn)槟J(rèn)窗口站和桌面上的“自由選擇的訪問控制列表”(DACL) 而沒有訪問桌面的適當(dāng)權(quán)限。可以讓管理員更改這些 DACL,或者您可以使用有權(quán)訪問這些對(duì)象的帳戶運(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)的訪問控制列表的更多信息,請(qǐng)參見下面的 Microsoft 白皮書:
http://www.microsoft.com/windows2000/docs/SecDefs.doc (http://www.microsoft.com/windows2000/docs/secdefs.doc)
有關(guān)其他信息,請(qǐng)單擊下面的文章編號(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)行
|
|