Share via


更新安全性原則

預設安全性原則並不知道任何自訂使用權限的存在。 例如,Everything 具名使用權限集合包含了執行階段提供的所有內建程式碼存取使用權限,但不包含任何的自訂使用權限。 若要更新安全性原則使它知道您的自訂使用權限,您必須執行三個動作:

  • 使原則知道您的自訂使用權限存在

  • 將組件加入至受信任組件清單中

  • 讓安全性原則知道應該將那些程式碼授與您的自訂使用權限

重要事項重要事項

在 .NET Framework 4 版 中,Common Language Runtime (CLR) 不會為電腦提供安全性原則。Microsoft 建議您使用 Windows 軟體限制原則做為 CLR 安全性原則的取代項目。本主題中的資訊適用於 .NET Framework 3.5 (含) 以前版本,但不適用於 .NET Framework 4 (含) 以後版本。如需這項變更和其他變更的詳細資訊,請參閱 .NET Framework 4 中的安全性變更

使原則知道您的自訂使用權限存在

若要使原則知道您的自訂使用權限存在,您必須:

  • 建立新的具名使用權限集合以含入您的自訂使用權限 (您可以修改現有的具名使用權限集合,而不需重新建立)

  • 給與該使用權限集合一個名稱

  • 讓安全性原則知道該具名使用權限集合的存在

如需詳細資訊,請參閱程式碼存取安全性原則工具 (Caspol.exe).NET Framework 組態工具 (Mscorcfg.msc)。 有幾種方式可以讓您加入新的使用權限集合。 您可以使用程式碼存取安全性原則工具 (Caspol.exe) 建立一個 .xml 檔,其中包含自訂使用權限集合的 XML 表示,然後再將這個檔案加入至執行該程式碼的電腦上的安全性原則。 使用 .NET Framework 組態工具 (Mscorcfg.msc),您可以複製現有的使用權限集合,再將使用權限的 XML 表示加入至新的使用權限集合。

若要確保您的 XML 表示為有效狀態並可正確地表示您的使用權限,您可以使用和以下範例類似的程式碼來產生它。 請注意這個程式碼會建立一個名為 MyCustomPermission 的自訂使用權限,並將它初始化為不受限制的狀態。 如果您的自訂使用權限無法實作 IUnrestrictedPermission,或不希望將您的使用權限設定為不受限制的狀態,請使用建構函式將您的使用權限初始化為您希望的狀態。

Imports System
Imports System.IO
Imports System.Security
Imports System.Security.Permissions

Class PSetXML
   Public Shared Sub Main()
      Dim perm As New MyCustomPermission(PermissionState.Unrestricted)
      Dim pset As New NamedPermissionSet("MyPermissionSet", PermissionState.None)
      pset.Description = "Permission set containing my custom permission"
      pset.AddPermission(perm)
      Dim file As New StreamWriter("mypermissionset.xml")
      file.Write(pset.ToXml())
      file.Close()
   End Sub
End Class
using System;
using System.IO;
using System.Security;
using System.Security.Permissions;

class PSetXML {
   public static void Main() 
   {
   MyCustomPermission perm = 
    new MyCustomPermission(PermissionState.Unrestricted);
   NamedPermissionSet pset = 
    new NamedPermissionSet("MyPermissionSet", PermissionState.None);
   pset.Description = "Permission set containing my custom permission";
   pset.AddPermission(perm);
   StreamWriter file = new StreamWriter("mypermissionset.xml");
   file.Write(pset.ToXml());
   file.Close();
   }
}

建立含有使用權限集合的 .xml 檔之後,您可以將它加入至安全性原則。 若要使用 Caspol.exe,請在命令列上輸入以下的命令:

caspol –machine –addpset mypermissionset.xml

當 Caspol.exe 詢問您是否要將包含自訂使用權限的組件加入至受信任組件清單時,請輸入 yes

若要使用 .NET Framework 組態工具加入包含使用權限集合的 .xml 檔,請選取 [執行階段安全性原則] 節點,再選取您要修改的原則等級。 在 [使用權限集合] 上按一下滑鼠右鍵,並選取 [新增]。 請使用精靈來加入使用權限集合。

將組件加入至受信任組件清單中

因為您的自訂使用權限將加入至 .NET Framework 安全性系統,它必須是完全受信任的 (和必須受安全性系統信任的任何程式碼相同)。 您可以將組件加入至受信任組件清單中,使您的組件取得完全信任。 使用 Caspol.exe 將您的自訂使用權限加入至清單之後 (如前述),您還必須將使用權限類別所參考的任何組件加入至清單中。 若要使用 Caspol.exe 將其他的組件加入至清單中,請在命令列上輸入以下命令:

caspol -addfulltrust mypermissionset.dll

若要檢視完全受信任的組件清單,請使用以下命令:

caspol -listfulltrust

因為自訂使用權限的組件 (以及它參考的任何組件) 將受安全性系統完全信任,因此使用加密式強式名稱來簽章這些檔案是非常重要的。 Caspol.exe 不會將沒有使用強式名稱的組件加入至完全信任清單中。

若要使用 .NET Framework 組態工具將組件加入至完全受信任的組件清單中,請在 [執行階段安全性原則] 節點上按一下滑鼠右鍵,再選取 [信任組件]。 請使用精靈來信任組件。

注意:如果實作自訂安全性物件的組件參考其他的組件,您必須先將參考的組件加入至完全信任的組件清單中。 使用 Visual Basic、Visual C++ 和 JScript 建立的自訂安全性物件,會分別參考 Microsoft.VisualBasic.dll、Microsoft.VisualC.dll 或 Microsoft.JScript.dll。 依預設,這些組件不在完全信任組件清單中。 您必須在加入自訂安全性物件之前,先將適當的組件加入至完全信任清單中, 否則將會破壞安全性系統,造成所有的組件都無法載入。 在這種情況下,Caspol.exe -all -reset 選項將不會修復安全性。 若要修復安全性,您必須手動編輯安全性檔案,以移除自訂安全性物件。

設定授與自訂使用權限的原則

您必須讓新的使用權限集合和適當的程式碼群組建立關聯,如此安全性原則才可將自訂使用權限授與應該擁有它的程式碼。 若要完成這項作業,您可以修改現有的程式碼群組,或加入新的程式碼群組 (表示應授與自訂使用權限的程式碼集合)。 如需程式碼群組的詳細資訊,請參閱安全性原則。 請使用下列 Caspol.exe 命令,將 mypermissionset 使用權限集合授與符合 LocalIntranet 程式碼群組成員資格條件的程式碼:

caspol -user -chggroup 1.2. mypermissionset

在這個範例中,標記 (Label) 1.2 表示程式碼群組 LocalIntranet。 若要顯示所有的程式碼群組及其相關的標記,請使用以下的命令:

caspol -list

若要檢視使用權限集合清單,請使用以下的命令:

caspol -listpset

若要使用 .NET Framework 組態工具將 mypermissionset 使用權限集合授與 LocalIntranet 程式碼群組的成員,請選取 [執行階段安全性原則] 節點,再選取 [電腦原則]。 在 [LocalIntranet_Zone] 節點上按一下滑鼠右鍵,再選取 [屬性]。 請使用 [使用權限集合] 索引標籤變更使用權限集合。

請參閱

參考

Caspol.exe (程式碼存取安全性原則工具)

Mscorcfg.msc (.NET Framework 組態工具)

IUnrestrictedPermission

概念

程式碼存取安全性

建立您自己的程式碼存取使用權限

.NET Framework 安全性原則