Sharepoin学习笔记 —架构系列--02 Sharepoint的处理(Process)与执行模型(Trust Model) 1
Sharepoint210有四種執(zhí)行模型:
? 1、完全信任執(zhí)行模型(Full Trust)
? 2、Bin/CAS 執(zhí)行模型 (1與2都屬于場解決方案)
??3、沙盒執(zhí)行模型(Sand Box)
? 4、 混合執(zhí)行方法(Hybrid Approach)
?Sharepoint最簡單的處理模型就是一個完整的Asp.net應(yīng)用程序處理模型,但由于Sharepoint2010中引入了沙盒處理方式,所以使得處理場景變得復(fù)雜。
?? 這里我們從一個Http請求開始,來看看Sharepoint的處理過程以及其執(zhí)行信任模型。
?一、由HTTP.SYS到對應(yīng)的應(yīng)用程序池(Application Pool)
???當(dāng)一個Http請求(Http Request)到達Sharepoint的前端 Web 服務(wù)器(Front-End Web Server)時,前端 Web 服務(wù)器(Front-End Web Server)上的HTTP.SYS就會偵測到有Http Request到來,于是對其進行分析判斷,看看這個Request請求的是哪個網(wǎng)站 (Website),這個網(wǎng)站 (Website)運行在哪個應(yīng)用程序池(Application Pool)中,并把它提交到對應(yīng)的應(yīng)用程序池(Application Pool),如下圖:
?? HTTP.SYS是Web服務(wù)器上用于接收Http請求的偵聽器, 它是一個位于Windows中的操作系統(tǒng)核心組件,能夠讓任何應(yīng)用程序通過它提供的接口,以http協(xié)議進行信息通訊。從外部來的所有的Http服務(wù)請求會在Http.sys里暫存入隊列,即使服務(wù)程序重啟,尚未被處理的請求也不會丟失.
二、Http Request被應(yīng)用程序池內(nèi)的IIS工作進程(W3WP)接管并處理
?? 當(dāng)Http Request到達了應(yīng)用程序池,便交IIS工作進程(Worker Process)繼續(xù)處理。
?? IIS工作進程(W3WP) 是IIS應(yīng)用程序的宿主, 我們在任務(wù)管理器中可以查看到它。
????????
???? 它的主要任務(wù)就是對到來的HttpRequest進行處理,處理內(nèi)容包括對Request的Session, ViewState,Cache的維護以及Request所請求的各種資源的分配等等。
2.1.1 IIS工作進程(W3WP)的創(chuàng)建
??? W3WP這個工作進程是由Windows Activation Service (WAS: Windows 進程激活服務(wù))進行創(chuàng)建并管理的,Windows 進程激活服務(wù)管理的不僅是W3WP,它還負責(zé)管理應(yīng)用程序池的配置(application pool configuration)以及與Http或與其它協(xié)議(protocol)相關(guān)的工作進程(Worker Process)的創(chuàng)建與生命周期的管理。
???????
???? 所以,當(dāng)有Http請求(Http Request)進入時,WAS就會創(chuàng)建一個W3WP工作進程。但當(dāng)你關(guān)閉了web網(wǎng)頁,由于http是無連接的訪問,它不會返回相應(yīng)的關(guān)閉信息,所以W3WP這個進程不會因為你關(guān)閉了web應(yīng)用程序爾關(guān)閉。但系統(tǒng)在應(yīng)用程序池的配置中,默認的是20分鐘,你也可以設(shè)定你指定的時間,那么在這個時間范圍內(nèi)沒有在訪問應(yīng)用程序,那么系統(tǒng)會自動的關(guān)閉w3wp這個進程.而不需要我們?nèi)藶榈母深A(yù)。
2.1.2關(guān)于應(yīng)用程序池
???? 我們可以把應(yīng)用程序池看成一個容器。它是將一個或多個應(yīng)用程序鏈接到一個或多個工作進程集合的配置。因為應(yīng)用程序池中的應(yīng)用程序與其他應(yīng)用程序被工作進程邊界分隔,所以某個應(yīng)用程序池中的應(yīng)用程序不會受到其他應(yīng)用程序池中應(yīng)用程序所產(chǎn)生的問題的影響
2.1.3 應(yīng)用程序池與W3WP的關(guān)系
?? ? 對于 IIS,可能存在若干個應(yīng)用程序池,而通常每個應(yīng)用程序池都會創(chuàng)建一個 W3WP進程。 但是, 并不是所有情況都是一個應(yīng)用程序池對應(yīng)一個 W3WP進程。 Web Garden , 或者一些異常發(fā)生時候,就會一個 應(yīng)用程序池對應(yīng)多個 W3WP進程。
?? ? Web Garden 指的是一個應(yīng)用程序可以在多個進程(w3wp)中來執(zhí)行,一次請求使用其中的一個。用這個的主要目的是提高程序的可用性。當(dāng)其中一個進程發(fā)生錯誤,那么也不會影響其他進程。發(fā)生錯誤的進程可以根據(jù)規(guī)則關(guān)閉,而其他的進程則可以繼續(xù)工作。
?? ? 而至于異常,則是指由于應(yīng)用程序池會在沒有請求的時候定時回收,但在發(fā)生錯誤的時候,會自動重新建立一個處理進程( W3WP進程)
2.1.4 W3WP工作進程標識(Worker Process Identity - WPI)
???? 在W3WP工作進程運行時需要有明確的身份,這個身份就叫作工作進程標識(Worker Process Identity - WPI) 。服務(wù)器并沒有提供一個直接的手段來設(shè)置工作進程在什么身份標識下運行, 而是通過應(yīng)用程序池的身份標識設(shè)定來實現(xiàn)的.
???? 在IIS6, Windows 2008 IIS7下, 默認關(guān)聯(lián)權(quán)限是NetworkService.
???? 在Windows 2008 R2 IIS7.5下, 默認是關(guān)聯(lián)權(quán)限是Application Pool Identity(應(yīng)用程序池標識帳戶). 在稍后我們還要具體說明。
???? 在運行時IIS會將應(yīng)用程序池(Application Pool)的身份(即: 應(yīng)用程序池標識API)注入到Worker Process中, 就會以應(yīng)用程序池的身份運行. 可以認為應(yīng)用程序池與其包含的Worker Process的運行身份是一致的。
2.1.5 應(yīng)用程序池標識(Application Pool Identity -API)
??? 前面提到了應(yīng)用程序池標識,應(yīng)用程序池標識是運行應(yīng)用程序池的工作進程所使用的服務(wù)帳戶名稱。
??? 在IIS6, Windows 2008 IIS7下, 應(yīng)用程序池標識默認關(guān)聯(lián)權(quán)限是NetworkService.
??? 在Windows 2008 R2 IIS7.5下, 應(yīng)用程序池默認是關(guān)聯(lián)權(quán)限是Application Pool Identity.
??? 需要特別注意的是,這里的Application Pool Identity是指的應(yīng)用程序池標識帳戶,它屬于應(yīng)用程序池標識(Application Pool Identity -API)的關(guān)聯(lián)帳戶的一種,雖然它們的英文拼寫一樣,但卻是不同的兩個概念,即一個是指的標識,一個是指的帳戶,我們可以從Application Pool的Advanced Setting中看到下圖, 從此圖中我們可以看到二者的區(qū)別。
???? 從上圖我們可以看出,應(yīng)用程序池標識(API)可以設(shè)置為許多類型的帳戶(Local Service, Local System, NetworkService, 應(yīng)用程序池標識帳戶<Application Pool Identity> 以及 用戶自定義帳戶)。
???2.1.6 W3WP的服務(wù)帳戶(Service Account)
??? 服務(wù)帳戶(Service Account)是Windows服務(wù)器為運行于其上的程序提供的帳戶,它的作用就是通過提供安全上下文(Security Context)來為訪問者提供在本系統(tǒng)中有效的安全屬性或規(guī)則集合。我們既可以在Active Directory下創(chuàng)建基于域的Service Account,也可以在本機創(chuàng)建基于本地的Service Account。
2.1.7應(yīng)用程序池帳戶(Application Pool Account)
??? IIS中的W3WP進程也和其它所有程序或進程一樣,必須在特定的Service Account下運行,這個Service Account就是應(yīng)用程序池帳戶(Application Pool Account)。當(dāng)你在IIS中創(chuàng)建一個應(yīng)用程序池時,Windows 進程激活服務(wù)(WAS)就會自動為你創(chuàng)建一個應(yīng)用程序池帳戶(Application Pool Account),這個帳戶通常是Sharepoint服務(wù)器場帳戶,因此該進程(W3WP)具有 SharePoint 資源的讀寫權(quán)限。在多服務(wù)器服務(wù)器場上,服務(wù)器場帳戶通常是域用戶(Domain User)。該帳戶是訪問內(nèi)容數(shù)據(jù)庫(Content Database)的同一帳戶
??? 所以,從上面的描述我們可以看出應(yīng)用程序池帳戶(Application Pool Account)其實就是我們前面講到的W3WP工作進程標識(Worker Process Identity - WPI)與應(yīng)用程序池標識(Application Pool Identity -API)所關(guān)聯(lián)的帳戶。它只是網(wǎng)上不同的文章從不同的角度抽象出的這個概念而已。換句話說,應(yīng)用程序池帳戶(Application Pool Account)就是應(yīng)用程序池標識(Application Pool Identity -API)或W3WP工作進程標識(Worker Process Identity - WPI)所關(guān)聯(lián)的帳戶,它們都屬于服務(wù)帳戶(Service Account)。
我們前面提到,在IIS7.5中(僅win7,win2008 SP2,win2008 R2支持),應(yīng)用程序池的運行帳戶(Application Pool Account),除了指定為LocalService,LocalSystem,NetWorkService這三種內(nèi)置帳戶外,還新增了一種ApplicationPoolIdentify(應(yīng)用程序池標識帳戶),下面分別說明這些內(nèi)置帳戶:
-
ApplicationPoolIdentity帳戶(應(yīng)用程序池標識帳戶) : IIS7.5在默認情況下,選擇"應(yīng)用程序池標識"帳戶。此帳戶對于您的應(yīng)用程序來說是最安全的,因為這個賬戶的權(quán)限很低, 只屬于 IIS_IUSRS 用戶組 ,ApplicationPoolIdentity 這個帳戶是一個"虛擬"帳戶,說它是虛擬的,是因為在用戶管理里看不到該用戶或用戶組,在命令行下輸入net user也無法顯示,但該帳號又是確實存在的。事實上Application Pool Identity只是一個統(tǒng)稱, 并不存在實際的這個命名. 他依賴你的Application Pool的名稱, 例如有一個Application Pool名字叫做: DefaultAppPool, 那么這個虛擬標識的全名是: IIS AppPool\ DefaultAppPool運行在此Application Pool下的Worker Process從任務(wù)管理器中可以看到w3wp是在DefaultAppPool這個用戶下運行的.
?
你可以在文件系統(tǒng)中對這個帳戶分配權(quán)限. 這么做的好處是能夠?qū)?quán)限分離開來做粒度更細的配置, 不像是NetworkService有很多應(yīng)用基于此, 設(shè)置一個權(quán)限影響一大片。如果你的程序需要訪問本地文件系統(tǒng) (比如日志輸出) , 就需要為 ApplicationPoolIdentity 賬戶設(shè)置 NTFS 權(quán)限, 這個賬戶在安全對話框是找不到的, 只能手工輸入 IIS APPPOOL\{app pool name} 進行設(shè)置。
- LocalService "本地服務(wù)"帳戶是用戶組的成員之一,它擁有與"網(wǎng)絡(luò)服務(wù)"帳戶(NetworkService)相同的用戶權(quán)限,但僅限于在本地計算機上使用。當(dāng)應(yīng)用程序池中的工作進程不需要訪問它所運行在的 Web 服務(wù)器以外的內(nèi)容時,可以使用此帳戶。
- LocalSystem "本地系統(tǒng)"帳戶擁有所有用戶權(quán)限,它是 Web 服務(wù)器上的管理員組的成員之一。Local System 帳戶是一個有權(quán)訪問整個系統(tǒng)(包括域控制器上的目錄服務(wù))的功能強大的帳戶。如果某個服務(wù)登錄到域控制器上的 Local System 帳戶,則該服務(wù)有權(quán)訪問整個域。默認情況下,某些服務(wù)將配置為登錄到 Local System 帳戶。不要更改默認的服務(wù)設(shè)置。應(yīng)盡可能避免使用"本地系統(tǒng)"帳戶,因為它會給 Web 服務(wù)器帶來更嚴重的安全風(fēng)險。
- NetworkService "網(wǎng)絡(luò)服務(wù)" 帳戶是用戶組的成員之一,并擁有運行應(yīng)用程序所需的用戶權(quán)限。通過使用計算機帳戶的憑據(jù),它可以在整個基于 Active Directory 的網(wǎng)絡(luò)上進行交互。 在IIS 6.0 與IIS 7 中,工作進程默認運行于此類型,它是Window內(nèi)建的Identity。它不需要密碼并且僅擁有用戶權(quán)限。
???? 應(yīng)用程序池帳戶(Application Pool Account)設(shè)置好后,會被自動加入到Sharepoint Farm內(nèi)的每個服務(wù)器(Server)上的WSS_WPG、WSS_ADMIN_WPG或IIS_USERS這三個組的成員(Member)中,或者換過來說,這三個組都擁有應(yīng)用程序池帳戶(Application Pool Account)。
????下面分別看看Sharepoint Farm內(nèi)的這三個組:
????? WSS_WPG組具有對本地資源的讀取訪問權(quán)限,除了Application Pool Account它還擁有LOCAL SERVICE, NETWORK SERVICE (如果Application Pool Account使用的不是它們)等帳戶。
????? WSS_ADMIN_WPG?組也具有對本地資源的讀取訪問權(quán)限,除了擁有Application Pool Account,它還擁有 Builtin\Administrators, NETWORK SERVICE, Sharepoint Farm admin以及Timer services等帳戶
????? IIS_IUSRS Group?組:這是IIS7的內(nèi)置組,用于代替IIS6中的IIS_WPG 組。默認它會擁有適當(dāng)?shù)臋?quán)限來運行Worker Process. 所有的工作進程標識(Worker Process Identity - WPI)下的運行帳戶均被隱式的自動加入到這個組中, 以獲得最小的運行權(quán)限. 例如當(dāng)你將MyAppPool這個Application Pool的運行身份設(shè)置為Application Pool Identity, 那么IIS AppPool\MyAppPool這個用戶會被自動加入到IIS_IUSRS組中擁有他的全部權(quán)限. 因此對此組權(quán)限賦值需很小心很容易不知不覺中影響一大片.同時在IIS7中,它還使用內(nèi)置的IUSER帳戶來代替以前IIS6中的IUSR_MachineName帳戶。IUSR是一個匿名帳戶,雖然它是一個匿名帳戶并且沒有密碼, 但他屬于authenticated users ,而authenticated users屬于Users組, 因此IUSR默認具備了Users組的權(quán)限
??
??? 在SQL Server數(shù)據(jù)庫方面,應(yīng)用程序池帳戶(Application Pool Account)還需要以下權(quán)限配置設(shè)置
???? 1.為 Web 應(yīng)用程序的應(yīng)用程序池帳戶分配內(nèi)容數(shù)據(jù)庫(content database)的 db_owner 角色。
???? 2.為此帳戶分配與服務(wù)器場配置數(shù)據(jù)庫關(guān)聯(lián)的 WSS_CONTENT_APPLICATION_POOLS 角色。
???? 3.為此帳戶分配與 SharePoint_Admin 內(nèi)容數(shù)據(jù)庫關(guān)聯(lián)的 WSS_CONTENT_APPLICATION_POOLS 角色。
???? 此外,應(yīng)用程序池帳戶(Application Pool Account)還有別于服務(wù)器場管理員帳戶(Farm Administration Account),后者除了前者所屬的WSS_WPG、WSS_ADMIN_WPG、IIS_USERS這三個組外,還包含在WSS_RESTRICTED_WPG_V4以及Performance Monitor User這兩個組中。
???? 但應(yīng)用程序池帳戶也有例外,如: SharePoint 管理中心網(wǎng)站(Central Administration Web Site)的應(yīng)用程序池標識所用帳戶與Windows SharePoint Services 定時服務(wù)的進程帳戶"不是"應(yīng)用程序池帳戶(Application Pool Account),而是服務(wù)器場帳戶,此帳戶也稱為數(shù)據(jù)庫訪問帳。
???? 簡單總結(jié):SharePoint 是一個 ASP.NET 應(yīng)用程序,它與 ASP.NET 應(yīng)用程序類似,當(dāng)前端 Web 服務(wù)器收到某個 HTTP 請求時,特殊的驅(qū)動程序(即 HTTP.SYS)將檢測該請求,并將其路由到處理目標 IIS 網(wǎng)站和目標 SharePoint Web 應(yīng)用程序的請求的應(yīng)用程序池。每個應(yīng)用程序池均有一個 IIS 工作進程 (w3wp.exe)用于執(zhí)行每個請求的請求管道,此工作進程需要設(shè)置應(yīng)用程序池帳戶(Application Pool Account, 這通常是服務(wù)器場帳戶,因此該進程具有 SharePoint 資源的讀寫權(quán)限。在多服務(wù)器服務(wù)器場上,服務(wù)器場帳戶通常是域用戶。該帳戶是訪問內(nèi)容數(shù)據(jù)庫的同一帳戶),而應(yīng)用程序池帳戶可以設(shè)置為LocalService,LocalSystem,NetWorkService以及 ApplicationPoolIdentify這些內(nèi)置帳戶,也可以設(shè)置用戶自定義帳戶,然后Sharepoint會把這個帳戶設(shè)置到Farm內(nèi)每個服務(wù)器上的WSS_WPG、WSS_ADMIN_WPG或IIS_USERS這三個組中,同時應(yīng)用程序池帳戶還會具備SQL Server數(shù)據(jù)庫方面的權(quán)限以訪問Sharepoint的數(shù)據(jù)庫內(nèi)容(eg:Content Database)。
???? 進入IIS 工作進程(IIS Worker Process)的階段是Sharepoint的四種執(zhí)行模型都必須經(jīng)過的處理階段。場解決方案與任何 ASP.NET 應(yīng)用程序一樣是在 IIS 工作進程(w3wp)中運行。而沙盒解決方案卻在具有特殊限制的執(zhí)行環(huán)境中運行(這對于阻止未授權(quán)或性能不佳的代碼減慢應(yīng)用程序池的速度或?qū)е聭?yīng)用程序池發(fā)生崩潰很重要。因此,SharePoint 將對可在沙盒解決方案中執(zhí)行的代碼施加限制)。當(dāng)請求嘗試訪問沙盒解決方案時,IIS 工作進程(w3wp)將會把工作交給在它內(nèi)部運行的 SharePoint 執(zhí)行管理器(Execution Manager),由執(zhí)行管理器(Execution Manager)負責(zé)查找沙盒工作進程(SPUCWorkerProcess.exe)(如果未運行任何沙盒工作進程,則啟動一個沙盒工作進程)。沙盒工作進程就是負責(zé)運行沙盒解決方案代碼的進程。
總結(jié)
以上是生活随笔為你收集整理的Sharepoin学习笔记 —架构系列--02 Sharepoint的处理(Process)与执行模型(Trust Model) 1的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 信用卡精养卡怎么做的
- 下一篇: SharePoint无代码工作流设计开发