次の方法で共有


カスタム アセンブリでのアクセス許可の宣言

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

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

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

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

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

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

ポリシー構成ファイルを変更して、アセンブリ固有のアクセス許可を付与できます。 たとえば、通貨換算を処理するカスタム アセンブリを作成する場合、ファイルから現在の為替レートを読み取る必要がある場合があります。 レート情報を取得するには、アセンブリのアクセス許可セットに追加のセキュリティ アクセス許可 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 セキュリティ」を参照してください。

こちらもご覧ください

レポートでのカスタム アセンブリの使用