談到ASP.NET程序的權限,一般可分為兩種:
1) 賬戶的權限。
2) 代碼的權限。
賬戶的權限可以限制運行在這個賬戶下的所有ASP.NET程序能進行什麼樣的操作,而代碼的權限是ASP.NET程序裡獨有的,它規定了ASP.NET程序能夠訪問什麼樣的資源,比如數據庫,文件等等。他們對ASP.NET程序是共同影響的,簡單地說,ASP.NET程序表現出來的是他們共同作用的交集。
在IIS 5中,Application Pool的默認配置賬戶是ASPNET。在IIS 6/7中有點不同,ASPNET賬戶被替成Network Service。以IIS 7為例,如果你使用的是默認的Network Service,那麼你的ASP.NET程序能訪問的資源都是受Network Service限制的,換句話說,這個賬戶能訪問什麼資源,你的ASP.NET程序才能訪問資源。Network Service在默認情況下,是可以讀寫IIS wwwroot文件夾下的所有文件以及在ACL的控制下來訪問其他文件夾。
Scenario 1: 在Visual Studio下開發的時候,我們運行Visual Studio的賬戶是系統賬戶(登錄機器的賬戶),這個賬戶的權限比Network Service要大,因而出現一旦把程序部署到IIS中就有錯誤的情形時,大多可以先從這方面考慮。
Scenario 2: 在以windows集成驗證方式連接數據庫時,有時也會碰到Network Service賬戶不能Login的情形,這也是由於在開發時是用系統賬戶登錄數據庫的,而在部署到IIS後,是用Network Service來連接數據庫。因而需要將Network Service賬戶添加到數據庫中。
代碼的權限在ASP.NET中叫做Code Access Security(CAS). 它規定了這個ASP.NET程序能夠訪問哪些資源。很明顯,在一些情況下,賬戶權限並不能很方便的限制ASP.NET程序能做什麼。利用CAS,我們可以限制ASP.NET程序是否能進行文件操作,是否能訪問數據庫資源。在ASP.NET的配置文件中,它分有5個不同的等級,通過設置不同的等級可以限制程序的訪問資源。如果需要詳情的話,建議大家可以查看這篇文章:
http://msdn.microsoft.com/en-us/library/ms998326.aspx
Scenario 3: ASP.NET程序部署到付費空間上後便不能創建文件了。這是因為服務器在machie級別定義了CAS,限制所有運行在這台機器上的ASP.NET不能進行文件操作。這樣做的目的主要是為了保護服務器的安全。
同時,根據程序需要,我們也可以使用impersonate(通常在windows驗證時會用到)。它可以模仿一個特定用戶,這樣的話,這個thread就運行在這個特定賬戶上。在域資源的訪問中,這是一個很不錯的手段來對不同的用戶進行限制。
Have a nice day!