カスタム アセンブリでの権限のアサート
既定では、カスタム アセンブリ コードは、限定された Execution 権限セットに基づいて実行されます。ただし、場合によっては、(ファイルやレジレジストリなど) セキュリティ システムで保護されたリソースを安全に呼び出すカスタム アセンブリを実装する必要が生じる場合もあります。そのためには、次の操作を実行する必要があります。
- セキュリティで保護された呼び出しを行うために、コードに必要な正しい権限を識別します。このメソッドが Microsoft .NET Framework ライブラリの一部である場合、この情報をメソッド ドキュメントに含める必要があります。
- カスタム アセンブリに必要な権限を与えるために、レポート サーバー ポリシーの構成ファイルを変更します。セキュリティ ポリシーの構成ファイルの詳細については、「Reporting Services セキュリティ ポリシー ファイルの使用」を参照してください。
- セキュリティで保護された呼び出しを行うメソッドの一部として、必要な権限をアサートします。レポート サーバーによって呼び出されるカスタム アセンブリ コードは、レポートの式のホスト アセンブリの一部であり、既定では Execution 権限を使用してカスタム アセンブリ コードを実行するため、このアサートが必要です。Execution 権限セットを使用して、コードによる、保護されたリソースを実行できますが、そのリソースを使用することはできません。
- カスタム アセンブリが厳密な名前で署名されている場合、カスタム アセンブリを 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\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 セキュリティ」を参照してください。