要求使用權限
更新:2007 年 11 月
要求使用權限是您讓 Runtime 知道您的程式碼必須被允許才可執行的方式。將屬性放入 (宣告式語法) 程式碼的組件範圍內,可以要求組件的使用權限。當建立組件後,語言編譯器會將要求的使用權限儲存於組件資訊清單 (Assembly Manifest)。在載入時間時,執行階段會檢查使用權限要求,並套用安全性原則規則以決定要授與組件的使用權限。要求只會影響執行階段拒絕程式碼的使用權限,它並無法影響執行階段將更多的使用權限給與您的程式碼。本機管理原則才擁有程式碼最大使用權限的最後控制權。
雖然您的程式碼編譯時並不會要求使用權限,但有幾項重要的因素使您的程式碼必須要求使用權限:
要求使用權限可以在程式碼被允許執行後增加成功執行的機會。要求最小使用權限集合的程式碼不會執行,除非它取得那些權限。如果您不認同最小的使用權限集合,在沒有授與某些使用權限下,您的程式碼將無法正常處理任何或所有的狀況,而使它無法正常地執行。
要求使用權限可以協助您確認程式碼只接受了它所需要的使用權限。如果您的程式碼沒有接受額外的使用權限,它就不會危害由這些額外使用權限所保護的資源,即使它是由會危害資源的惡意程式碼或病毒所暴露出來的。您應該只要求您的程式碼會用到的使用權限,而不要求過多的使用權限。
要求使用權限可以讓管理員知道應用程式所需的最小使用權限需求,並據此調整安全性原則。管理員使用使用權限檢視工具 (Permview.exe) 檢查組件並設定安全性原則,以核發要求的使用權限。如果您不明確地要求應用程式需要的使用權限,使用權限檢視工具就無法傳回應用程式要求的任何使用權限資訊。如果管理員不知道這項資訊,將很難管理您的應用程式。
要求使用權限可以通知執行階段您的應用程式需要或不需要的使用權限。例如,當您的應用程式會直接寫入本機硬碟而不使用隔離儲存區 (Isolated Storage) 時,您的應用程式必須擁有 FileIOPermission。如果您的程式碼不要求 FileIOPermission 而本機的安全設定也不允許應用程式擁有這個使用權限時,當應用程式嘗試寫入磁碟時將會引發一個安全性例外狀況。即使該應用程式可以處理這個例外狀況,它也將不被允許寫入磁碟。這個行為可能會妨礙到使用者,如果您的應用程式是一個他們已經使用了一段時間的文字編輯程式。從另一個角度而言,當您的應用程式要求 FileIOPermission 而本機安全性設定不允許您的應用程式擁有 FileIOPermission 時,當應用程式啟動時也將產生一個例外狀況,但使用者並不會遺失他們的資料。此外,如果您的應用程式要求 FileIOPermission 而且是一個受信任的應用程式,管理員可以調整安全性原則允許它以遠端共用的方式來執行。
如果您的程式碼不會存取受保護的資源或執行受保護的作業,就不必要求任何的使用權限。例如,當程式碼只依據傳給它的輸入值計算結果,而不使用任何的資源時,就不必要求使用權限。如果您的程式碼會存取受保護的資源,但不要求必要的使用權限,它可能仍被允許執行,但當它嘗試存取沒有擁有必要使用權限的資源時,則可能在某些執行點上失敗。
若要要求使用權限,您必須知道程式碼會使用哪些資源和保護的作業,也必須知道保護這些資源和作業的是哪些使用權限。此外,您必須追蹤您的元件呼叫的任何類別庫方法所存取的資源。如需 .NET Framework 內含的程式碼存取使用權限清單,請參閱使用權限主題。
以下表格將說明使用權限要求的型別。
使用權限要求 |
說明 |
---|---|
最小的使用權限 (RequestMinimum) |
您的程式碼必須擁有才可執行的使用權限 |
選擇性使用權限 (RequestOptional) |
您的程式碼可以使用的使用權限,但不使用仍可有效地執行。這個要求會隱含拒絕其他未特別要求的所有權限 |
拒絕的使用權限 (RequestRefuse) |
您想確定您的程式碼不會被授與的使用權限,即使安全性原則允許可以授與它們 |
在內建的使用權限集合上執行上述任何要求 (要求內建的使用權限集合)。 |
內建的使用權限集合,包括:Nothing、Execution、FullTrust、Internet、LocalIntranet 和 SkipVerification |
在 XML 編碼的使用權限集合上執行上述任何的要求 (要求 XML 編碼的使用權限) |
以 XML 表示 (一個包含 XML 編碼的使用權限的字串,或包含編碼的使用權限集合的 XML 檔案其位置) 的使用權限集合 |
如果您指定了要求的使用權限 (使用 RequestMinimum),程式碼將被授與每一個安全性原則所允許的使用權限。程式碼只能在依照它所要求的使用權限下執行。
在某些情況下,要求選擇性的使用權限而不要求必要的使用權限,可能會對組件所接受的使用權限造成嚴格的限制。例如,假設安全性原則一般會將與 Everything 具名使用權限集合關聯的使用權限授與組件 A。當組件 A 的開發人員要求以使用權限 A 做為選擇性使用權限,但不要求任何必要的使用權限時,組件 A 將被授與使用權限 A (如果安全性原則允許),或不授與任何的使用權限。
請參閱
工作
概念
參考
SecurityAction.RequestOptional