UDF コード アクセス セキュリティのアクセス許可を制限する
特定のユーザー定義関数 (UDF) アセンブリを完全信頼で実行しないようにするには、そのアセンブリに対するコード アクセスのセキュリティ アクセス許可を明示的に制限する必要があります。 コード グループを構成し、アクセス許可を制限するには, .NET Framework 2.0 構成ツールを使用します。
たとえば、複数のメソッドを含む UDF アセンブリに関するシナリオを考えてみましょう。 1 つの UDF メソッドはカスタム計算を実行し、同じアセンブリに含まれるもう 1 つの UDF メソッドは Web サービスを呼び出して株価を取得します。 ユーザーは最初のメソッド (計算) を呼び出す Excel ブックのみを使用するため、このアセンブリからの Web アクセスを無効にしてセキュリティを高めることにします。 UDF アセンブリは、サーバー上のフォルダー C:\UdfAssemblies\CalcAndWebAccessUdf.dll にインストールしました。 アセンブリは Microsoft SharePoint Server 2010 と同じコンピューター上にあるため、Excel Calculation Services によって UDF アセンブリが読み込まれるとき、それは MyComputer ゾーンに読み込まれます。 既定で、MyComputer ゾーンは完全信頼されます。 したがって、読み込まれた UDF アセンブリには完全信頼のアクセス許可が付与されます。
UDF アセンブリをロックダウンして Web アクセスをできないようにするには、以下の手順を実行して、付与されているアクセス許可セットを明示的に制限する必要があります。
新しい URL ベースのコード グループをマシン レベルの My_Computer_Zone の下に作成します。 コード グループのスコープをその特定のアセンブリに設定し、カスタム アクセス許可セットを作成します。
カスタム コード グループのプロパティを、そのカスタム コード グループに関連付けられたアクセス許可セットからのアクセス許可のみをポリシー レベルが持つという構成にします。 同じコンピューター上に存在する UDF アセンブリを Excel Calculation Services が読み込むとき、アセンブリは MyComputer ゾーンに読み込まれます。 したがって、既定では、UDF アセンブリには完全信頼が付与されます。 カスタム アクセス許可セットと完全信頼アクセス許可セットの論理積をとると、結果は完全信頼になります。 そうではなく、カスタム コード グループに関連付けられたアクセス許可セットからのアクセス許可のみをポリシーに設定するには、[このポリシー レベルはこのコード グループに関連するアクセス許可セットからのアクセス許可のみを持つ] プロパティを有効にする必要があります。
コード グループを構成する方法の詳細については、MSDN の以下の資料を参照してください。
.NET Framework構成ツールを使用したコード グループの構成 (https://msdn.microsoft.com/library/default.asp?url=/library/cpguide/html/cpconUsingNETConfigurationToolToWorkWithCodeGroups.asp?frame=true)
実際のコード アクセス セキュリティ (https://msdn.microsoft.com/library/default.asp?url=/library/dnnetsec/html/thcmch08.asp)
新しいコード グループを作成するには
[ スタート] をクリックし、[ すべてのプログラム]、[ 管理ツール] とポイントしてから、[ Microsoft .NET Framework 2.0 Configuration] をクリックします。
これにより、[ .NET 2.0 Framework Configuration] ツールが開始されます。
左側のウィンドウで、[ マイ コンピューター] ノードを展開し、[ ランタイム セキュリティ ポリシー] ノードを展開します。
[ マシン] ノードを展開します。
[ コード グループ] ノードを展開します。
[ All_Code] ノードを展開します。
[ My_Computer_Zone] ノードを展開します。[ My_Computer_Zone] を右クリックしてから、[ 新規] を選択します。[ 新しいコード グループの識別] ダイアログ ボックスが表示されます。
[ 新しいコード グループを作成する] を選択します。
[ 名前] フィールドに、新しいコード グループの名前を入力します。例: RestrictWebAccessUdf。
[ 次へ] をクリックします。
コード グループのスコープを特定の UDF アセンブリに限定するために、[ このコード グループの条件の種類を選択します] から [ URL] を選択します。
これにより、[ URL] フィールドが表示されます。
[ URL ] フィールドに、Web へのアクセスを制限する UDF アセンブリへのパス (たとえば、C:\UdfAssemblies\CalcAndWebAccessUdf.dll) を入力します。
[次へ] をクリックします。
[ 新しいアクセス許可セットの作成] を選択し、[ 次へ] をクリックします。
[ 名前] フィールドに、アクセス許可セットの名前を入力します。例: AssemblyExecutionCustomPermissionSet。
[ 次へ] をクリックします。
UDF アセンブリに "アセンブリ実行" アクセス許可を付与するために、[ アセンブリへのアクセス許可] の一覧から [ セキュリティ] を選択した後、[ 追加] をクリックします。
これにより、[アクセス許可の設定] ダイアログ ボックスが表示されます。
[アセンブリに以下のセキュリティ アクセスを許可] を選択します。
[アセンブリを有効にする] を選択します。
[ OK] をクリックしてから [ 次へ] をクリックします。
[ 完了] をクリックします。
[ My_Computer_Zone] ノードの下に新しいカスタム コード グループが表示されるはずです (この例では、 RestrictWebAccessUdf)。
アクセス許可セットが実行されるかどうかを確認するには
[ My_Computer_Zone] ノードの下で、新しいカスタム コード グループ (この例では、 RestrictWebAccessUdf) を右クリックして、[ プロパティ] を選択します。
[ 全般] タブで、[ このポリシーレベルはこのコード グループに関連するアクセス許可セットからのアクセス許可のみを持つ] チェック ボックスを選択します。
[ダイヤル プラン (電話のコンテキスト)] ボックスで、[参照] をクリックして、ユーザーのダイヤル プランを見つけます。
注:
UDF メソッドが Web サービス呼び出しを実行できなかったために例外を throw した場合は、その UDF を呼び出した Excel 数式に [#VALUE!] エラーが表示されます。
注:
テストのために UDF アセンブリに対する Web アクセスを有効にする場合は、カスタム アクセス許可セットに適切なアクセス許可を追加する必要があります。 そのためには、「新しいコード グループを作成するには」の手順のステップ 11 で [Web アクセス] を選択します。