安全性權限
Common Language Runtime 允許程式碼只執行程式碼有使用權限去執行的那些作業。 執行階段會使用稱為權限的物件,在 Managed 程式碼上強制執行限制。 執行階段在數個命名空間中提供內建的權限類別,同時支援設計和實作自訂權限類別。
有兩種使用權限,且各自擁有特定用途:
程式碼存取使用權限 代表對受保護資源的存取或執行保護作業的能力。
以角色為基礎的安全性權限 提供機制,用於探索使用者 (或代表使用者的代理程式) 是否具有特定識別或是否為指定角色的成員。 PrincipalPermission 是唯一以角色為基礎的安全性權限。
安全性權限的形式可以是權限類別 (命令式安全性),或是代表權限類別的屬性 (宣告式安全性)。 安全性權限的基底類別是 System.Security.CodeAccessPermission,而安全性權限屬性的基底類別是 System.Security.Permissions.CodeAccessSecurityAttribute。
組件形式的應用程式會在載入應用程式定義域時獲得授與一組權限。 授與的方式通常是使用預先定義的權限集,這些權限集是由 SecurityManager.GetStandardSandbox 方法所決定。 該授權集會決定程式碼可以使用的權限。 執行階段會依據程式碼的原始位置 (例如,本機電腦、近端內部網路或網際網路) 授與權限。 如果程式碼載入至沙箱 (Sandbox) 中,也可以對其授與特殊權限。 如需在沙箱中執行程式碼的詳細資訊,請參閱 HOW TO:在沙箱中執行部分信任的程式碼。
使用權限的主要用途如下:
程式庫程式碼可以要求 (Demand) 其呼叫端具有特定使用權限。 如果在您的程式碼上放置對某一使用權限的 Demand,則會預期使用您程式碼的所有程式碼都具有該使用權限才能執行。 要求可以用來決定呼叫端是否具有特定資源的存取權限,或是探索呼叫端的識別。
程式碼可以使用權限,拒絕對其想要保護之資源的存取。 您可以使用 SecurityAction.PermitOnly 指定有限的權限集,以隱含拒絕所有其他權限。 但是不建議您基於防止蓄意誤用的目的,使用 PermitOnly 禁止存取權。 所呼叫的組件在其授權集中有拒絕的使用權限 (Refused Permission),可以針對要使用的任何權限執行 SecurityAction.Assert,藉此覆寫拒絕的使用權限 (Denied Permission)。 例如,如果您僅允許 UIPermission 並且呼叫原本就有 FileIOPermission 的組件,則該組件就只能針對 FileIOPermission 進行 Assert,並且執行檔案作業。 能夠安全保護資源不受到參考組件中未受信任程式碼存取的唯一方式,是使用沒有包含這些使用權限的授權集來執行程式碼。