プラン表示のセキュリティ

プラン表示の実行プラン情報は、さまざまな方法で生成できます。Transact-SQL SET ステートメントのオプションや SQL Server Profiler のイベント クラスを使用したり、動的管理関数の sys.dm_exec_query_plan に対してクエリを実行することで生成できます。使用する方法によって必要な権限セットが異なります。ここでは、このような権限について説明します。Transact-SQL バッチでの SHOWPLAN 権限のチェック方法に関する詳細については、「SHOWPLAN 権限と Transact-SQL バッチ」を参照してください。

注意

sp_dbcmptlevel ストアド プロシージャを使用して SQL Server データベースの互換性レベルを 80 に設定している場合は、現在の SHOWPLAN 権限が適用されます。互換性レベルを 80 に設定しても、Microsoft SQL Server 2000 のプラン表示権限の動作にはなりません。

SHOWPLAN 権限について

大部分のプラン表示用の Transact-SQL SET オプション使用して実行プラン情報を出力するには、ユーザーに次の権限が必要です。

  • ビュー、ストアド プロシージャ、ユーザー関数など、Transact-SQL ステートメントで参照されるオブジェクトを含んでいるデータベースでの SHOWPLAN 権限。

  • Transact-SQL ステートメント自体を実行できる適切な権限。

    セキュリティに関する注意セキュリティに関する注意

    SHOWPLAN 権限、ALTER TRACE 権限、または VIEW SERVER STATE 権限を持つユーザーは、プラン表示出力にキャプチャされたクエリを表示できます。これらのクエリには、パスワードなどの機密情報が含まれている場合があります。したがって、これらの権限は、機密情報を表示することが認められているユーザー (たとえば db_owner 固定データベース ロールのメンバーや sysadmin 固定サーバー ロールのメンバー) のみに付与することをお勧めします。また、プラン表示ファイルまたはプラン表示関連のイベントを含むトレース ファイルのみを保存すること、保存先は NTFS ファイル システムが使用されている場所とすること、および機密情報を表示する権限を持つユーザーのみにアクセスを制限することをお勧めします。

    たとえば、次のクエリについて考えてみます。

    SELECT COUNT(*)

    FROM table_1

    WHERE column_1 < 10

    悪意のあるユーザーがこの例のような一連のクエリのプラン表示出力を作成し、作成するたびに述語内の値 "10" を異なる定数に置き換えた場合、推定行数を読み取ることで、table_1 内の column_1 に関して、列の値のおおよそのデータ分布を推測できます。

SHOWPLAN 権限は、次のようなデータベース レベルの権限です。

  • 次に示すユーザーだけがこの権限の許可、拒否、または取り消しを行えます。

    • sysadmin 固定サーバー ロールのメンバー。既定では、この固定サーバー ロールのメンバー全員が、サーバー上のすべてのデータベースに対する SHOWPLAN 権限を持っています。

    • データベースの dbcreator 固定サーバー ロールのメンバー。このデータベースは、このロールのメンバーが作成し、その結果所有することになったデータベースです。既定では、この固定サーバー ロールのメンバー全員が、作成し、その結果所有することになったデータベースに SHOWPLAN 権限を所持しています。

    • データベースの db_owners 固定データベース ロールのメンバー。このデータベースは、このデータベース ロールのメンバーが所有するデータベースです。既定では、この固定サーバー ロールのメンバー全員が、所有しているデータベースに対する SHOWPLAN 権限を持っています。

  • 所有権の継承をサポートします。所有権の継承が途切れると、継承が途切れたノードで権限が再度チェックされます。ただし、SHOWPLAN 権限はデータベース レベルの権限なので、クエリで 2 つ以上のデータベースのオブジェクトを参照している場合に限りチェックが行われます。所有権の継承の詳細については、「所有権の継承」を参照してください。

SHOWPLAN 権限の許可、拒否、取り消しに使用する構文の詳細については、「SHOWPLAN 権限の許可、拒否、および取り消しの構文」を参照してください。

CREATE TABLE 権限、INSERT 権限、および SELECT 権限を持っている User1 が、データベース D にテーブル T (User1 はテーブルの所有者) を作成してこのテーブルに行を挿入し、このテーブルの SELECT クエリを記述した場合、そのクエリは正常に実行されます。ただし、User1 は、データベース D に対する SHOWPLAN 権限が付与されていない限り、プラン表示を生成できません。

注意

上記の例で、データベース D に、User1 が SELECT 権限を持っているビュー V が含まれているとします。User1 は、D の SHOWPLAN 権限が与えられると、V を所有していなくても、クエリを V に対して実行することでプラン表示を生成できます。このプラン表示により、User1 は、V の基となるテーブルやビューなど、V のビュー定義を表示できます。ただし、User1 が所有するテーブルなどのオブジェクトを含んでいるビュー V が別のデータベース D2 に存在していて、User1 が D2 の所有者でない場合は、D2 での SHOWPLAN 権限が必要なので、SHOWPLAN 権限がチェックされます。

プラン表示用 SET オプションを使用するのに必要な権限

各種のプラン表示用 SET ステートメント オプションを使用するために必要な権限を、次の表に示します。

プラン表示用 SET オプション

必要な権限

SET SHOWPLAN_XML ON

SET SHOWPLAN_ALL ON

SET SHOWPLAN_TEXT ON

SELECT、INSERT、UPDATE、DELETE、EXEC stored_prodedure、および EXEC user_defined_function の各ステートメントでは、プラン表示を生成するために次の権限が必要です。

  • Transact-SQL ステートメントを実行できる適切な権限。

  • Transact-SQL ステートメントで参照されるテーブルやビューなどのオブジェクトを含んでいるすべてのデータベースでの SHOWPLAN 権限。

DDL、USE database_name、SET、DECLARE、動的 Transact-SQL など、その他すべてのステートメントでは、必要となるのは Transact-SQL ステートメントを実行するための適切な権限のみです。詳細については、「SHOWPLAN 権限と Transact-SQL バッチ」を参照してください。

SET STATISTICS XML ON

SET STATISTICS PROFILE ON

  • Transact-SQL ステートメントを実行できる適切な権限。

  • Transact-SQL ステートメントで参照されるオブジェクトを含んでいるすべてのデータベースでの SHOWPLAN 権限。

STATISTICS PROFILE や STATISTICS XML の結果セットを生成しない Transact-SQL ステートメントの場合は、Transact-SQL ステートメントを実行できる適切な権限だけが必要です。STATISTICS PROFILE や STATISTICS XML の結果セットを生成する Transact-SQL ステートメントの場合は、Transact-SQL ステートメントの実行権限と SHOWPLAN 権限の両方のチェックがどちらも成功する必要があります。いずれかが失敗すると、Transact-SQL ステートメントの実行が中断され、プラン表示情報は生成されません。プラン表示情報を生成する Transact-SQL ステートメントの詳細については、「Showplan を生成する Transact-SQL ステートメント」を参照してください。

SET STATISTICS TIME

SET STATISTICS IO

  • Transact-SQL ステートメントを実行できる適切な権限。

これらの SET ステートメント オプションでは、SHOWPLAN 権限がチェックされません。また、これらの SET ステートメント オプションには SHOWPLAN 権限は不必要です。

SHOWPLAN 権限がチェックされる場合とは

SHOWPLAN 権限は、Transact-SQL のステートメントまたはバッチを実行してプラン表示情報が生成される場合にチェックされます。このチェックは、プラン表示用 SET オプションが ON に設定されている場合は行われません。

注意

Transact-SQL バッチの実行対象データベースは、USE <database_name> ステートメントを使用して設定します。USE <database_name> ステートメントでは SHOWPLAN 権限がチェックされません。また、実行対象データベースでも SHOWPLAN 権限はチェックされません。

プラン表示用 SET ステートメント オプションの詳細については、次のトピックを参照してください。

SQL Server Management Studio を使用してグラフィカルな実行プランを表示するのに必要な権限

SQL Server Management Studio でグラフィカルな実行プランを表示するために必要な権限を次の表に示します。

Management Studio の実行プラン オプション

必要な権限

[推定実行プランの表示]

SHOWPLAN_XML SET ステートメント オプションを使用するのに必要な権限と同じ権限が必要です。

[実際の実行プランを含める]

STATISTICS XML SET ステートメント オプションを使用するのに必要な権限と同じ権限が必要です。

詳細については、「グラフィカル実行プランの表示 (SQL Server Management Studio)」を参照してください。

SQL Server Profiler のイベント クラスを使用して実行プランを表示するのに必要な権限

SQL Server Profiler イベント クラスを使用して実行プランを表示するには、ユーザーは、sysadmin 固定サーバー ロールのメンバーであるか、ALTER TRACE 権限が許可されている必要があります。SHOWPLAN 権限はチェックされません。また、SHOWPLAN 権限は必要ありません。

詳細については、「SQL Server Profiler のイベント クラスを使用した実行プランの表示」を参照してください。

sys.dm_exec_query_plan 動的管理関数を使用して実行プランを表示するのに必要な権限

sys.dm_exec_query_plan 動的管理関数を使用して実行プランを表示する場合、ユーザーに必要なのは VIEW SERVER STATE 権限のみです。

詳細については、「sys.dm_exec_query_plan (Transact-SQL)」を参照してください。

関連項目

その他の技術情報