談到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!