レポートとリソースの保護

各レポートおよびリソースのセキュリティを設定して、これらのアイテムへのユーザーのアクセスのレベルを制御できます。 既定では、組み込みの Administrators グループのメンバーであるユーザーのみ、レポートの実行、リソースの表示、プロパティの変更、およびアイテムの削除を行うことができます。 他のすべてのユーザーについては、レポートまたはリソースへのアクセスを許可するロール割り当てを作成する必要があります。

レポートおよびリソースへのロールベースのアクセス

レポートおよびリソースへのアクセスを許可するために、既存のロール割り当てを親フォルダーからユーザーに継承させることも、アイテム自体に新しいロール割り当てを作成することもできます。

多くの場合は、親フォルダーから継承した権限を使用します。 個々のレポートとリソースにセキュリティを設定する必要があるのは、いくつかのシナリオのみです。 そのシナリオを次に示します。

  • レポートまたはリソースが存在することを知る必要がないユーザーにおいて、レポートまたはリソースを非表示にする場合
  • レポートまたはアイテムのアクセス レベルを上げる場合。

これらの目的は、共存することができます。 レポートへのアクセスを少数のユーザーに制限し、そのユーザーのすべてまたは一部に、レポートを管理するための他の権限を与えることができます。

目的を達成するには、複数のロールの割り当てを作成する必要がある場合があります。 たとえば、2 人のユーザー Ann と Fernando、および Human Resource Managers グループがアクセス権を持つレポートを作成するとします。 Ann と Fernando はレポートを管理できる必要がありますが、Human Resource Managers のメンバーはレポートの実行だけが必要です。 これらすべてのユーザーの要件を満たすには、Ann と Fernando をそれぞれレポートのコンテンツ マネージャーに設定し、Human Resource Managers グループに対して表示専用のタスクをサポートする、個別のロールの割り当てを 3 つ作成します。

レポートまたはリソースにセキュリティを設定すると、そのアイテムを新しい場所に移動しても、その設定は持続します。 たとえば、少数のユーザーのみがアクセス権を与えられているレポートを移動すると、レポートは引き続き、それらのユーザーのみが利用できます。 この結果は、比較的オープンなセキュリティ ポリシーを持つフォルダーに移動した場合に発生する可能性もあります。

パブリッシュしたレポートまたはドキュメント内の HTML インジェクション攻撃の緩和

Reporting Servicesでは、レポートとリソースは、レポートを実行しているユーザーのセキュリティ ID で処理されます。 式、スクリプト、カスタム レポート アイテム、またはカスタム アセンブリがレポートに含まれる場合、ユーザーの資格情報でコードが実行されます。 リソースがスクリプトを含む HTML ドキュメントである場合、ユーザーがレポート サーバーでドキュメントを開く際にスクリプトが実行されます。 レポート内のスクリプトまたはコードの実行は、ある程度のリスクを伴う強力な機能です。 悪意のあるコードの場合、レポート サーバーおよびレポートを実行しているユーザーは、攻撃に対して脆弱な状態になります。

HTML として処理されるレポートおよびリソースにアクセスする場合、レポートが完全信頼で処理され、悪意のあるスクリプトがクライアントに送信される可能性があることに注意してください。 ブラウザー設定に応じて、ブラウザーで指定されている信頼のレベルで、クライアントは HTML を実行します。

次の予防策で、悪意のあるスクリプトを実行するリスクを緩和できます。

  • コンテンツをレポート サーバーにパブリッシュできるユーザーは、慎重に選択して決定します。 悪意のあるコンテンツがパブリッシュされる可能性があるので、コンテンツをパブリッシュできるユーザーは、少数の信頼されたユーザーに限定する必要があります。

  • すべてのパブリッシャーは、不明なソースや信頼されていないソースのレポートおよびリソースのパブリッシュを避ける必要があります。 必要に応じて、テキスト エディターでファイルを開き、疑わしいスクリプトや URL を探してください。

レポート パラメーターおよびスクリプト インジェクション

レポート パラメーターを使用すると、レポートの全体的なデザインと実行の柔軟性が高まります。 その一方で、こうした柔軟性がおびき寄せによる攻撃に悪用されることもあります。 悪意のあるスクリプトを誤って実行するリスクを軽減するためには、信頼されたソースのレポートだけを開くようにしてください。 次に示す、HTML レンダラーのスクリプト インジェクション攻撃が行われる可能性のあるシナリオを検討してください。

  1. レポートにテキスト ボックスが含まれており、そのハイパーリンク アクションが、悪意のあるテキストが含まれている可能性のあるパラメーターの値に設定されている。

  2. レポート サーバーにパブリッシュされたレポートやその他の方法で公開されたレポートのレポート パラメーターの値が、Web ページの URL から制御できる状態になっている。

  3. 攻撃者は Web ページまたはレポート サーバーへのリンクを作成します。 そのリンクは、フォーム javascript:<malicious script here> 内のパラメーターの値を指定し、おびき寄せによる攻撃で他のユーザーにそのリンクを送信します。

レポートには、レポート アイテムまたはレポート アイテムの一部の Action プロパティの値を使用して、ハイパーリンクが埋め込まれることがあります。 ハイパーリンクは、レポートの処理時に外部データ ソースから取得されるデータにバインドできます。 悪意のあるユーザーによって基になるデータが変更された場合、このハイパーリンクには、スクリプティング攻撃のリスクが生じます。 パブリッシュまたはエクスポートされたレポート内のリンクをユーザーが選択すると、悪意のあるスクリプトが実行される可能性があります。

レポート内のリンクによって悪意のあるスクリプトが誤って実行されるリスクを軽減するためには、信頼されたソースのデータにのみハイパーリンクをバインドします。 悪用されるおそれのあるリンクがクエリ結果のデータやデータをハイパーリンクにバインドする式によって生成されないことを確認してください。 たとえば、複数のデータセット フィールドのデータを連結する式に基づくハイパーリンクは使用しないでください。 必要に応じてレポートを参照し、[ソースの表示] を使用して疑わしいスクリプトや URL がないかどうかを確認してください。

パラメーター化されたレポート内の SQL インジェクション攻撃の緩和

String型のパラメーターが含まれるレポートでは、使用可能な値の一覧 (有効な値の一覧とも呼ばれています) を必ず使用してください。また、レポートを実行するすべてのユーザーに対して、レポート表示に必要な権限のみを与えてください。 String型のパラメーターを定義する際には、任意の値が許容されるテキスト ボックスが表示されます。 使用可能な値の一覧を使用すると、入力できる値が制限されます。 クエリ パラメーターにレポート パラメーターが関連付けられていて、使用可能な値の一覧を使用していない場合、レポート ユーザーはテキスト ボックスに SQL 構文を入力できます。 このアクションにより、レポートとサーバーが SQL インジェクション攻撃にさらされる可能性があります。 さらに、ユーザーが新しい SQL ステートメントを実行するための十分な権限を持っている場合は、サーバーで予想外の結果が生じる可能性もあります。

レポート パラメーターがクエリ パラメーターに関連付けられていない可能性があり、パラメーター値がレポートに含まれています。 その場合、レポート ユーザーは式の構文または URL をパラメーター値に入力し、レポートを Excel または HTML に表示することができます。 別のユーザーがそのレポートを表示して、表示されたパラメーター コンテンツを選択すると、悪意のあるスクリプトまたはリンクが意図せず実行されてしまう可能性があります。

悪意のあるスクリプトを誤って実行するリスクを軽減するためには、信頼されたソースのレポートしか開かないようにする必要があります。

Note

前のリリースのドキュメントでは、式として動的クエリを作成する例が記載されていました。 この種類のクエリは、SQL インジェクション攻撃への脆弱性が生じるので、推奨されていません。

機密レポートの保護

機密情報を含むレポートは、重要なデータにアクセスするための資格情報の入力をユーザーに要求することによって、データアクセス レベルのセキュリティで保護する必要があります。 詳細については、「レポート データ ソースに関する認証情報と接続情報を指定する」をご覧ください。 また、未承認のユーザーがアクセスできないように、フォルダーをセキュリティで保護することもできます。 詳細については、「フォルダーを保護する」をご覧ください。