SQL Server エージェントの固定データベース ロール

SQL Server 2005 には、次の msdb データベースの固定データベース ロールが導入されました。これらのロールを使用することで、管理者は SQL Server エージェントへのアクセスをより細かく制御できます。特権レベルの低いロールから順に、次に示します。

  • SQLAgentUserRole

  • SQLAgentReaderRole

  • SQLAgentOperatorRole

上記のどのロールのメンバでもないユーザーが SQL Server Management Studio の SQL Server に接続しても、オブジェクト エクスプローラには [SQL Server エージェント] ノードは表示されません。SQL Server エージェントを使用するユーザーは、上記のいずれかの固定データベース ロールのメンバであるか、または固定サーバー ロール sysadmin のメンバである必要があります。

SQL Server エージェントの固定データベース ロールの権限

SQL Server エージェントのデータベース ロールの各権限の相互関係は、同心構造になっています。SQL Server エージェント オブジェクト (警告、オペレータ、ジョブ、スケジュール、プロキシなど) に対して、高いレベルの特権を持つロールは、低いレベルの特権を持つロールの権限を継承します。たとえば、最も特権レベルの低い SQLAgentUserRole のメンバが proxy_A へのアクセスを許可された場合、SQLAgentReaderRole および SQLAgentOperatorRole の両方のメンバは、proxy_A へのアクセスが明示的に許可されていなくても、このプロキシへのアクセス権が自動的に与えられていることになります。これは、セキュリティに影響することがあります。セキュリティ上の影響については、次のセクションの各ロールの説明に記載します。

SQLAgentUserRole の権限

SQLAgentUserRole には、SQL Server エージェントの固定データベース ロールのうち、最も低い特権レベルが設定されています。オペレータ、ローカル ジョブ、ジョブ スケジュールのみに対する権限があります。SQLAgentUserRole のメンバは、所有しているローカル ジョブおよびジョブ スケジュールのみに対する権限を持っています。このメンバが、マルチサーバー ジョブ (マスタ サーバーと対象サーバーのジョブ) を使用することはできません。また、ジョブの所有権を変更して、所有していないジョブへのアクセス権を得ることもできません。SQLAgentUserRole のメンバは、SQL Server Management Studio の [ジョブ ステップのプロパティ] ダイアログ ボックスでのみ、使用できるプロキシのリストを表示できます。SQLAgentUserRole のメンバに対しては、SQL Server Management Studio オブジェクト エクスプローラには [ジョブ] ノードだけが表示されます。

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

SQL Server エージェントデータベースロールのメンバに対してプロキシへのアクセスを許可する前に、セキュリティ上の影響について検討してください。SQLAgentReaderRole および SQLAgentOperatorRole は、自動的に SQLAgentUserRole のメンバになります。つまり、SQLAgentReaderRole および SQLAgentOperatorRole のメンバは、SQLAgentUserRole に許可されたすべての SQL Server エージェント プロキシにアクセスし、これらのプロキシを使用できることになります。

次の表に、SQL Server エージェント オブジェクトに対する SQLAgentUserRole の権限の概要を示します。

操作

オペレータ

ローカル ジョブ

(所有しているジョブのみ)

ジョブ スケジュール

(所有しているスケジュールのみ)

プロキシ

作成/変更/削除

不可

可 1

不可

リストの表示 (列挙)

可 2

可 3

有効化/無効化

不可

適用なし

プロパティの表示

不可

不可

実行/停止/開始

適用なし

適用なし

適用なし

ジョブ履歴の表示

適用なし

適用なし

適用なし

ジョブ履歴の削除

適用なし

不可 4

適用なし

適用なし

アタッチ/デタッチ

適用なし

適用なし

適用なし

1 ジョブの所有権は変更できません。

2sp_notify_operator および Management Studio の [ジョブのプロパティ] ダイアログ ボックスで使用できるオペレータのリストを取得できます。

3 プロキシのリストは、Management Studio の [ジョブ ステップのプロパティ] ダイアログ ボックスでのみ使用できます。

4 所有しているジョブのジョブ履歴を削除するには、SQLAgentUserRole のメンバは、sp_purge_jobhistory に対する EXECUTE 権限が明示的に許可されている必要があります。他のジョブのジョブ履歴は削除できません。

SQLAgentReaderRole の権限

SQLAgentReaderRole には、すべての SQLAgentUserRole の権限、および使用できるマルチサーバー ジョブのリスト、ジョブのプロパティ、およびジョブの履歴を表示する権限が含まれています。このロールのメンバは、所有しているジョブとジョブ スケジュールだけでなく、使用できるすべてのジョブとジョブ スケジュール、およびそのプロパティのリストを表示することもできます。SQLAgentReaderRole のメンバは、ジョブの所有権を変更して、所有していないジョブへのアクセス権を得ることはできません。SQLAgentReaderRole のメンバに対しては、SQL Server Management Studio オブジェクト エクスプローラには [ジョブ] ノードだけが表示されます。

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

SQL Server エージェントデータベースロールのメンバに対してプロキシへのアクセスを許可する前に、セキュリティ上の影響について検討してください。SQLAgentReaderRole のメンバは、自動的に SQLAgentUserRole のメンバになります。つまり、SQLAgentReaderRole のメンバは、SQLAgentUserRole に対して許可されたすべての SQL Server エージェント プロキシにアクセスし、これらのプロキシを使用できることになります。

次の表に、SQL Server エージェント オブジェクトに対する SQLAgentReaderRole の権限の概要を示します。

操作

オペレータ

ローカル ジョブ

マルチサーバー ジョブ

ジョブ スケジュール

プロキシ

作成/変更/削除

不可

可 1 (所有しているジョブのみ)

不可

可 (所有しているスケジュールのみ)

不可

リストの表示 (列挙)

可 2

可 3

有効化/無効化

不可

可 (所有しているジョブのみ)

不可

可 (所有しているスケジュールのみ)

適用なし

プロパティの表示

不可

不可

プロパティの編集

不可

可 (所有しているジョブのみ)

不可

可 (所有しているスケジュールのみ)

不可

実行/停止/開始

適用なし

可 (所有しているジョブのみ)

不可

適用なし

適用なし

ジョブ履歴の表示

適用なし

適用なし

適用なし

ジョブ履歴の削除

適用なし

不可 4

不可

適用なし

適用なし

アタッチ/デタッチ

適用なし

適用なし

適用なし

可 (所有しているスケジュールのみ)

適用なし

1 ジョブの所有権は変更できません。

2sp_notify_operator および Management Studio の [ジョブのプロパティ] ダイアログ ボックスで使用できるオペレータのリストを取得できます。

3 プロキシのリストは、Management Studio の [ジョブ ステップのプロパティ] ダイアログ ボックスにのみ表示できます。

4 所有しているジョブのジョブ履歴を削除するには、SQLAgentReaderRole のメンバは、sp_purge_jobhistory に対する EXECUTE 権限が明示的に許可されている必要があります。他のジョブのジョブ履歴は削除できません。

SQLAgentOperatorRole の権限

SQLAgentOperatorRole には、SQL Server エージェントの固定データベース ロールのうち、最も高いレベルの特権が設定されています。これには、SQLAgentUserRole および SQLAgentReaderRole のすべての権限が含まれています。このロールのメンバは、オペレータおよびプロキシのプロパティを表示することも、サーバー上で使用できるプロキシおよび警告を列挙することもできます。

SQLAgentOperatorRole のメンバは、ローカル ジョブおよびスケジュールに関する追加の権限を持っています。すべてのローカル ジョブを実行、停止、または開始したり、サーバー上のローカル ジョブのジョブ履歴を削除できます。また、サーバー上のすべてのローカル ジョブおよびスケジュールを、有効または無効にすることもできます。ローカル ジョブまたはスケジュールを有効または無効にするには、このロールのメンバはストアド プロシージャ sp_update_job および sp_update_schedule を使用する必要があります。SQLAgentOperatorRole のメンバは、ジョブまたはスケジュールの名前か ID を指定するパラメータ、および @enabled パラメータのみを指定できます。他のパラメータを指定すると、ストアド プロシージャの実行は失敗します。SQLAgentOperatorRole のメンバは、ジョブの所有権を変更して、所有していないジョブへのアクセス権を得ることはできません。

SQLAgentOperatorRole のメンバに対しては、SQL Server Management Studio オブジェクト エクスプローラには [ジョブ] ノード、[警告] ノード、[オペレータ] ノード、および [プロキシ] ノードのみが表示されます。このロールのメンバに表示されないのは、[エラー ログ] ノードだけです。

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

SQL Server エージェントデータベースロールのメンバに対してプロキシへのアクセスを許可する前に、セキュリティ上の影響について検討してください。SQLAgentOperatorRole のメンバは、自動的に SQLAgentUserRole および SQLAgentReaderRole のメンバになります。つまり、SQLAgentOperatorRole のメンバは、SQLAgentUserRole または SQLAgentReaderRole に対して許可されたすべての SQL Server エージェント プロキシにアクセスし、これらのプロキシを使用できることになります。

次の表に、SQL Server エージェント オブジェクトに対する SQLAgentOperatorRole の権限の概要を示します。

操作

警告

オペレータ

ローカル ジョブ

マルチサーバー ジョブ

ジョブ スケジュール

プロキシ

作成/変更/削除

不可

不可

可 2 (所有しているジョブのみ)

不可

可 (所有しているスケジュールのみ)

不可

リストの表示 (列挙)

可 1

有効化/無効化

不可

不可

可 3

不可

可 4

適用なし

プロパティの表示

プロパティの編集

不可

不可

可 (所有しているジョブのみ)

不可

可 (所有しているスケジュールのみ)

不可

実行/停止/開始

適用なし

適用なし

不可

適用なし

適用なし

ジョブ履歴の表示

適用なし

適用なし

適用なし

適用なし

ジョブ履歴の削除

適用なし

適用なし

不可

適用なし

適用なし

アタッチ/デタッチ

適用なし

適用なし

適用なし

適用なし

可 (所有しているスケジュールのみ)

適用なし

1sp_notify_operator および Management Studio の [ジョブのプロパティ] ダイアログ ボックスで使用できるオペレータのリストを取得できます。

2 ジョブの所有権は変更できません。

3SQLAgentOperatorRole のメンバは、ストアド プロシージャ sp_update_job を使用し、@enabled パラメータおよび @job_id (または @job_name) パラメータの値を指定することにより、所有していないローカル ジョブを有効または無効にできます。このロールのメンバが、このストアド プロシージャに対して他のパラメータを指定した場合、プロシージャの実行は失敗します。

4SQLAgentOperatorRole のメンバは、ストアド プロシージャ sp_update_schedule を使用し、@enabled パラメータおよび @schedule_id (または @name) パラメータの値を指定することにより、所有していないスケジュールを有効または無効にできます。このロールのメンバが、このストアド プロシージャに対して他のパラメータを指定した場合、プロシージャの実行は失敗します。

ユーザーへの複数のロールの割り当て

固定サーバー ロール sysadmin のメンバは、SQL Server エージェントのすべての機能にアクセスできます。sysadmin ロールのメンバではないが、SQL Server エージェントの複数の固定データベース ロールのメンバであるユーザーの場合、これらのロールの同心構造権限モデルについて覚えておくことが重要です。特権レベルの高いロールには常に、そのロールよりも特権レベルが低いロールの権限がすべて含まれているため、複数のロールのメンバであるユーザーは、そのユーザーがメンバとして属しているロールの中で、最も特権レベルの高いロールに関連付けられた権限を自動的に持っていることになります。