カスタム アセンブリでのアクセス許可のアサート

既定では、カスタム アセンブリ コードは、限定された Execution アクセス許可セットに基づいて実行されます。 場合によっては、セキュリティ システム内の保護されたリソース (ファイルやレジストリなど) に対してセキュリティで保護された呼び出しを行うカスタム アセンブリを実装することが必要になる場合があります。 これを実現するには、次のアクションを実行する必要があります。

  1. セキュリティで保護された呼び出しを行うために、コードに必要な正しい権限を識別します。 このメソッドが Microsoft .NET Framework ライブラリの一部である場合、この情報をメソッド ドキュメントに含める必要があります。

  2. カスタム アセンブリに必要な権限を与えるために、レポート サーバー ポリシーの構成ファイルを変更します。 セキュリティ ポリシー構成ファイルの詳細については、「Reporting Services セキュリティ ポリシー ファイルの使用」を参照してください。

  3. セキュリティで保護された呼び出しを行うメソッドの一部として、必要な権限をアサートします。 レポート サーバーによって呼び出されるカスタム アセンブリ コードは、レポート式のホスト アセンブリの一部であり、既定では Execution アクセス許可で実行するため、このアサートが必要です。 Execution アクセス許可セットでコードを実行できますが、保護されたリソースを使用することはできません。

  4. カスタム アセンブリが厳密な名前で 署名されている場合は、AllowPartiallyTrustedCallersAttribute でマークします。 これは、カスタム アセンブリがレポート式ホスト アセンブリの一部であるレポート式から呼び出されるために必要です。既定では、FullTrust は付与されないため、"部分的に信頼された" 呼び出し元になります。 詳細については、「複雑な名前を持つカスタム アセンブリの使用」を参照してください。

セキュリティで保護された呼び出しを実装する

ポリシーの構成ファイルを変更して、アセンブリに特定の権限を与えます。 たとえば、通貨換算を処理するためにカスタム アセンブリを書き込んだ場合、現在の通貨換算レートをファイルから読み取らなければならない場合があります。 レート情報を取得するには、アセンブリのアクセス許可セットに追加のセキュリティ アクセス許可 FileIOPermission を追加する必要があります。 ポリシーの構成ファイルで次の追加エントリを作成できます。

<PermissionSet class="NamedPermissionSet"  
   version="1"  
   Name="CurrencyRatesFilePermissionSet"  
   Description="A special permission set that grants read access to my currency rates file.">  
      <IPermission class="FileIOPermission"  
         version="1"  
         Read="C:\CurrencyRates.xml"/>  
      <IPermission class="SecurityPermission"  
         version="1"  
         Flags="Execution, Assertion"/>  
</PermissionSet>  

次のように、アセンブリの権限セットを参照するコード グループを追加します。

<CodeGroup class="UnionCodeGroup"  
   version="1"  
   PermissionSetName="CurrencyRatesFilePermissionSet"  
   Name="MyNewCodeGroup"  
   Description="A special code group for my custom assembly.">  
   <IMembershipCondition class="UrlMembershipCondition"  
      version="1"  
      Url="C:\Program Files\Microsoft SQL Server\MSRS10_50.MSSQLSERVER\MSSQL\Reporting Services\ReportServer\bin\CurrencyConversion.dll"/>  
</CodeGroup>  

コードに適切な権限を取得するためには、カスタム アセンブリ コード内で権限をアサートする必要があります。 たとえば、XML ファイル C:\CurrencyRates.xml の読み取り専用アクセスを追加する場合、次のコードをメソッドに追加する必要があります。

// C#  
FileIOPermission permission = new FileIOPermission(FileIOPermissionAccess.Read, @"C:\CurrencyRates.xml");  
try  
{  
   permission.Assert();  
   // Load the XML currency rates file  
   XmlDocument doc = new XmlDocument();  
   doc.Load(@"C:\CurrencyRates.xml");  
...  

次のように、アサーションをメソッド属性として追加することもできます。

[FileIOPermissionAttribute(SecurityAction.Assert, Read=@"C:\CurrencyRates.xml")]  

詳細については、『.NET Framework 開発者ガイド』の「.NET Framework セキュリティ」を参照してください。