次の方法で共有


セキュリティ ポリシーの更新

既定のセキュリティ ポリシーは、カスタム アクセス許可の存在については考慮しません。たとえば、Everything という名前付きアクセス許可セットには、ランタイムが提供するすべての組み込みコード アクセス許可が含まれていますが、カスタム アクセス許可は含まれていません。カスタム アクセス許可を認識するようにセキュリティ ポリシーを更新するには、次の 3 つの処理を行う必要があります。

  • ポリシーがカスタム アクセス許可を認識するようにします。

  • アセンブリを、信頼されているアセンブリのリストに追加します。

  • セキュリティ ポリシーに対して、カスタム アクセス許可を与えるコードについて指示します。

ポリシーによるカスタム アクセス許可の認識

ポリシーにカスタム アクセス許可を認識させるには、次の処理を行う必要があります。

  • カスタム アクセス許可を含む、新しい名前付きアクセス許可セットを作成します。新しいセットを作成する代わりに、既存の名前付きアクセス許可セットを修正することもできます。

  • 新しいアクセス許可セットに名前を付けます。

  • セキュリティ ポリシーに、その名前付きアクセス許可セットの存在を通知します。

詳細については、「コード アクセス セキュリティ ポリシー ツール (Caspol.exe)」または「.NET Framework 構成ツール (Mscorcfg.msc)」を参照してください。新しいアクセス許可セットを追加するには、いくつかの方法があります。コード アクセス セキュリティ ポリシー ツール (Caspol.exe) を使用する場合は、カスタム アクセス許可セットの XML 表現を含んだ .xml ファイルを作成し、コードを実行するコンピュータのセキュリティ ポリシーにこのファイルを追加します。.NET Framework 構成ツール (Mscorcfg.msc) を使用する場合は、既存のアクセス許可セットをコピーし、アクセス許可の XML 表現を新しいアクセス許可セットに追加します。

有効であり、アクセス許可を正しく表す 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

カスタム アクセス許可を含んだアセンブリを、信頼されているアセンブリのリストに追加するかどうかを確認するメッセージが表示された場合は「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 オプションを使用してもセキュリティを修復できません。セキュリティを修復するには、セキュリティ ファイルを手動で編集し、カスタム セキュリティ オブジェクトを削除する必要があります。

カスタム アクセス許可を与えるポリシーの設定

セキュリティ ポリシーが、カスタム アクセス許可を持つ必要があるコードにそのアクセス許可を与えることができるように、新しいアクセス許可セットを適切なコード グループに関連付ける必要があります。この関連付けを行うには、既存のコード グループを修正するか、またはカスタム アクセス許可を与える必要のあるコードを識別する新しいコード グループを追加します。コード グループの詳細については、「セキュリティ ポリシー」を参照してください。LocalIntranet コード グループのメンバシップ条件を満たすコードに付与するアクセス許可セットとして mypermissionset を指定するには、次の Caspol.exe コマンドを使用します。

caspol -user -chggroup 1.2. mypermissionset

この例では、ラベル 1.2 はコード グループ LocalIntranet を表します。すべてのコード グループとそれらに関連付けられたラベルを表示するには、次のコマンドを使用します。

caspol -list

アクセス許可セットのリストを参照するには、次のコマンドを使用します。

caspol -listpset

.NET Framework 構成ツールを使用して、LocalIntranet コード グループのメンバに付与されるアクセス許可セットとして mypermissionset を指定するには、[ランタイム セキュリティ ポリシー] ノードをクリックし、[コンピュータ] ポリシーをクリックします。[LocalIntranet_Zone] ノードを右クリックし、[プロパティ] をクリックします。[権限セット] タブを使用して、アクセス許可セットを変更します。

参照

関連項目

コード アクセス セキュリティ ポリシー ツール (Caspol.exe)
.NET Framework 構成ツール (Mscorcfg.msc)
IUnrestrictedPermission Interface

概念

独自のコード アクセス許可の作成
セキュリティ ポリシー

その他の技術情報

コード アクセス セキュリティ