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 ジョブの所有権は変更できません。

2 sp_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 ジョブの所有権は変更できません。

2 sp_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

適用なし

プロパティの表示

プロパティの編集

不可

不可

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

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

不可

実行/停止/開始

なし

なし

不可

適用なし

適用なし

ジョブ履歴の表示

適用なし

適用なし

適用なし

適用なし

ジョブ履歴の削除

適用なし

適用なし

不可

適用なし

適用なし

アタッチ/デタッチ

適用なし

適用なし

適用なし

適用なし

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

適用なし

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

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

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

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

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

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

関連項目

参照

sp_update_job (Transact-SQL)

sp_update_schedule (Transact-SQL)

sp_notify_operator (Transact-SQL)

sp_purge_jobhistory (Transact-SQL)

概念

SQL Server エージェントのセキュリティの実装