SharePoint 統合モードで Reporting Services の RDL サンドボックスの有効化と無効化

適用対象: SQL Server Reporting Services (2016) SharePoint Not supported Power BI Report Server

以前のバージョンの SQL Server Reporting Services (SSRS) に関するコンテンツについては、「SQL Server 2014 Reporting Services」をご覧ください。

レポート定義言語 (RDL) サンドボックス機能を使用すると、複数のテナントが 1 つのレポート サーバー Web ファームを使用している環境で、個々のテナントによる特定の種類のリソースの使用を検出および制限できるようになります。 このような例として、複数のテナントまたは複数の企業によって使用される単一のレポート サーバー Web ファームを管理するホスティング サービスのシナリオがあります。 レポート サーバー管理者は、次の目的を達成するためにこの機能を有効にできます。

  • 外部リソースのサイズを制限する。 外部リソースには、画像、.xslt ファイル、およびマップ データが含まれます。

  • レポートのパブリッシュ時に、式のテキストで使用される型およびメンバーを制限する。

  • レポートの処理時に、テキストの長さおよび式の戻り値のサイズを制限する。

Note

SharePoint と Reporting Services の統合は、SQL Server 2016 以降では使用できません。

RDL サンドボックスが有効になると、次の機能は無効になります。

  • レポート定義の <Code> 要素内のカスタム コード。

  • SQL Server 2005 Reporting Services (SSRS) カスタム レポート アイテムに対する RDL 下位互換モード。

  • 式での名前付きパラメーター。

この記事では、RSReportServer.Config ファイルの <RDLSandboxing> 要素内の各要素について説明します。 このファイルの変更方法について詳しくは、「Reporting Services の構成ファイル (RSreportserver.config) の変更」を参照してください。 RDL サンドボックス機能に関連した操作は、サーバー トレース ログに記録されます。 トレース ログの詳細については、「 レポート サーバー サービスのトレース ログ」を参照してください。

構成例

RSReportServer.Config ファイルの <RDLSandboxing> 要素の設定および値の例を次に示します。

<RDLSandboxing>  
   <MaxExpressionLength>5000</MaxExpressionLength>  
   <MaxResourceSize>5000</MaxResourceSize>  
   <MaxStringResultLength>3000</MaxStringResultLength>  
   <MaxArrayResultLength>250</MaxArrayResultLength>  
   <Types>  
      <Allow Namespace="System.Drawing" AllowNew="True">Bitmap</Allow>  
      <Allow Namespace="TypeConverters.Custom" AllowNew="True">*</Allow>  
   </Types>  
   <Members>  
      <Deny>Format</Deny>  
      <Deny>StrDup</Deny>  
   </Members>  
</RDLSandboxing>  

構成設定

次の表では、構成設定に関する情報を示します。 構成ファイルに出現する順に、設定を示します。

設定 説明
MaxExpressionLength RDL 式で許可される文字数の最大値です。

既定値は1000
MaxResourceSize 外部リソースに許可されるサイズの最大値 (単位: KB) です。

既定値は100
MaxStringResultLength RDL 式の戻り値で許可される文字数の最大値です。

既定値は1000
MaxArrayResultLength RDL 式の配列戻り値で許可されるアイテム数の最大値です。

既定値は100
RDL 式内で許可されるメンバーの一覧です。
許可 RDL 式で許可される型または型のセットです。
Namespace Allow の属性の 1 つであり、Value に適用される 1 つ以上の型を含む名前空間です。 このプロパティでは、大文字と小文字が区別されません。
AllowNew Allow のブール属性であり、RDL 式内または RDL の <Class> 要素内でその型の新しいインスタンスを作成できるかどうかを制御します。

RDLSandboxing が有効であるときは、AllowNew の設定に関係なく、RDL 式に新しい配列を作成できません。
Value Allow の値であり、RDL 式で許可される型の名前を示します。 値が * の場合は、名前空間内のすべての型が許可されることを意味します。 このプロパティでは、大文字と小文字が区別されません。
[メンバー] <Types> 要素に含まれる型一覧、RDL 式で許可されないメンバー名一覧の値。
Deny RDL 式で許可されないメンバーの名前です。 このプロパティでは、大文字と小文字が区別されません。

メンバーに対して Deny が指定されている場合、この名前を持つすべてのタイプのメンバーが拒否されます。

RDL サンドボックスが有効なときの式の操作

式で使用されるリソースの管理を容易にするために、RDL サンドボックス機能を次のような方法で変更できます。

  • 式に使用する文字数を制限する。

  • 式から返される結果のサイズを制限する。

  • 式での使用を許可する特定の型の一覧を指定する。

  • 式での使用を許可された型の一覧に対して、制限するメンバーの一覧を名前で指定する。

  • RDL サンドボックス機能を使用して、許可される型の一覧と拒否メンバーの一覧を作成することができます。 許可される型の一覧は、許可リストと呼ばれます。 拒否するメンバーの一覧を禁止リストと呼びます。

Note

レポート定義では、式のリファレンスの各インスタンスの型をコンピューターが知ることはできません。 禁止リストにメンバーを追加すると、許可リストに含まれるすべての型について、その名前を持つすべてのメンバーが拒否されます。

RDL 式の結果は、実行時に検証されます。 RDL 式は、レポートのパブリッシュ時にレポート定義で検証されます。 レポート サーバーのトレース ログで、違反がないかどうかを確認できます。 詳細については、「 Report Server Service Trace Log」を参照してください。

型の操作

許可リストに型を追加することで、RDL 式にアクセスする次のエントリ ポイントを制御できます。

  • 型の静的メンバー

  • Visual Basic の New メソッド。

  • レポート定義の <Classes> 要素。

  • 許可リストに含まれるタイプに対して禁止リストに追加したメンバー

許可リストでは、次のエントリ ポイントは制御されません。

  • レポート データセット。 クエリから返されるレポート データセット内のフィールドは、任意の有効な RDL 型を含むことができます。

  • レポート パラメーター。 ユーザーから提供されるパラメーターの値は、任意の有効な RDL 型を含むことができます。

  • 禁止リストに含まれていない、有効なタイプのメンバー。 既定では、許可リストに含まれるすべてのタイプのすべてのメンバーが有効になっています。 禁止リストにメンバー名を追加すると、許可リストに含まれるすべてのタイプについて、その名前を持つすべてのメンバーが拒否されます。

1 つの型のメンバーを有効にして、別の型では同じ名前のメンバーを拒否するには、次の手順を実行する必要があります。

  • そのメンバー名に対して <Deny> 要素を追加します。

  • 有効にするメンバーに対して、カスタム アセンブリのクラスに異なる名前のプロキシ メンバーを作成します。

  • その新しいクラスを許可リストに追加します。

許可リストに Visual Basic .NET Framework の関数を追加するには、Microsoft.VisualBasic 名前空間の対応するタイプを許可リストに追加します。

許可リストに Visual Basic .NET Framework の型キーワードを追加するには、対応する CLR 型を許可リストに追加します。 たとえば、Visual Basic .NET Framework のキーワード Integer を使用するには、<RDLSandboxing> 要素に次の XML フラグメントを追加します。

<Allow Namespace="System">Int32</Allow>  

許可リストにジェネリック型または Visual Basic .NET Framework の null 許容型を追加するには、次を実施する必要があります。

  • ジェネリック型または Visual Basic .NET Framework の null 許容型に対してプロキシ型を作成します。

  • そのプロキシ型を許可リストに追加します。

カスタム アセンブリから許可リストに型を追加しても、アセンブリに対して暗黙に実行権限が付与されることはありません。 コード アクセス セキュリティ ファイルを具体的に変更して、アセンブリに実行権限を提供する必要があります。 詳細については、「 Reporting Services のコード アクセス セキュリティ」を参照してください。

メンバーの <Deny> 一覧の管理

許可リストに新しいタイプを追加するときには、メンバーの禁止リストの更新が必要となります。

  • 新しい型を導入するバージョンでカスタム アセンブリを更新する場合。

  • 許可リストに含まれるタイプにメンバーを追加する場合。

  • レポート サーバー上で .NET Framework を更新する場合。

  • レポート サーバーを Reporting Services の新しいバージョンにアップグレードする場合。

  • RDL 型に新しいメンバーが追加された可能性があるため、新しい RDL スキーマを処理できるようにレポート サーバーを更新する場合

演算子と New の操作

既定では、Visual Basic .NET Framework の言語演算子は、New を除き、常に許可されます。 <Allow> 要素の AllowNew 属性は、New 演算子を制御します。 既定のコレクション アクセサー演算子 ! や Visual Basic .NET Framework のキャスト マクロ (CInt など) のような、他の言語演算子は常に許可されます。

カスタム演算子を含め、禁止リストへの演算子の追加はサポートされていません。 特定の型に対して演算子を除外するには、次の操作を実行する必要があります。

  • 除外する演算子を実装しないプロキシ型を作成します。

  • そのプロキシ型を許可リストに追加します。

RDL 式に新しい配列を作成するには、定義するクラスのメソッドで配列を作成し、そのクラスを許可リストに追加します。

RDL 式に新しい配列を作成するには、次の手順を実行する必要があります。

  • 新しいクラスを定義し、そのクラスのメソッドで配列を作成します。

  • このクラスを許可リストに追加します。

RsReportServer.config 構成ファイル
レポート サーバー サービスのトレース ログ

その他の質問 Reporting Services のフォーラムに質問してみてください