要求使用權限
重要事項 |
---|
在 .NET Framework 4 版 中,已經移除對 RequestMinimum、RequestOptional 和 RequestRefuse 使用權限要求的執行階段支援。本主題不適用於以 .NET Framework 4 (含) 以後版本為基礎的程式碼。如需這項變更和其他變更的詳細資訊,請參閱 .NET Framework 4 中的安全性變更。 |
提出使用權限的要求可以讓 Runtime 知道您的程式碼獲准所能夠進行的動作。 若要要求組件的使用權限,請在程式碼的組件範圍中加入屬性 (宣告式語法)。 當建立組件後,語言編譯器會將要求的使用權限儲存於組件資訊清單 (Assembly Manifest)。 在載入時間時,執行階段會檢查使用權限要求,並套用安全性原則規則以決定要授與組件的使用權限。 這些要求只會造成執行階段拒絕您的程式碼存取組件,且執行階段並不會因此賦予程式碼超過其所應當獲得的使用權限。 本機管理原則才擁有程式碼最大使用權限的最後控制權。
注意事項 |
---|
必須常駐於電腦上的程式碼會在 My_Computer_Zone 中執行,預設這是獲得完全信任的區域。完全信任會讓所有使用權限要求都獲得核准。使用權限的要求一定會成功,即使對於不符合身分識別條件的身分識別使用權限也是如此。如果您的程式碼只是要在 My_Computer_Zone 中執行,則不需設定任何值來要求使用權限。如果您的程式碼是要在其他任何區域中執行,則建議要求使用權限。 |
注意事項 |
---|
在 .NET Framework 3.5 Service Pack 1 (含) 以後版本中,以共用方式於內部網路執行的應用程式預設都具有完全信任。如果您的應用程式打算以共用方式執行,那麼該應用程式執行時即已完全受信任,如同儲存於電腦中的常駐應用程式一般。如需詳細資訊,請參閱在完全信任環境下執行內部網路應用程式。 |
雖然您的程式碼以部分信任執行時並不會要求使用權限,但有幾項重要的因素使您的程式碼必須要求使用權限:
要求使用權限可以在程式碼被允許執行後增加成功執行的機會。 要求最小使用權限集合的程式碼不會執行,除非它取得那些權限。 如果您不認同最小的使用權限集合,在沒有授與某些使用權限下,您的程式碼將無法正常處理任何或所有的狀況,而使它無法正常地執行。
要求使用權限可以協助您確認程式碼只接受了它所需要的使用權限。 如果您的程式碼沒有接受額外的使用權限,它就不會危害由這些額外使用權限所保護的資源,即使它是由會危害資源的惡意程式碼或病毒所暴露出來的。 您應該只要求您的程式碼會用到的使用權限,而不要求過多的使用權限。
要求使用權限可以讓管理員知道應用程式所需的最小使用權限需求,並據此調整安全性原則。 您可以在 Visual Studio 專案的專案屬性頁中,從 [安全性] 索引標籤設定應用程式所需的使用權限。 如果管理員不知道這項資訊,將很難管理您的應用程式。
要求使用權限可以通知執行階段您的應用程式需要或不需要的使用權限。 例如,當您的應用程式會直接寫入本機硬碟而不使用隔離儲存區 (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