SQL Server エージェントの固定データベース ロール
適用対象: SQL Server
Azure SQL Managed Instance
重要
現在、Azure SQL Managed Instance によって、すべてではありませんが、ほとんどの SQL Server エージェントの機能がサポートされています。 詳細については、Azure SQL Managed Instance と SQL Server の T-SQL の相違点に関するページを参照してください。
SQL Server には、次の 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 の [ジョブ ステップのプロパティ] ダイアログ ボックスでのみ、使用できるプロキシのリストを表示できます。 SQL Server Management Studio オブジェクト エクスプローラーには、 [ジョブ] ノードのみが SQLAgentUserRole のメンバーに表示されます。
重要
SQL Server エージェント データベース ロールのメンバーに対してプロキシへのアクセスを許可する前に、セキュリティ上の影響について検討してください。 SQLAgentReaderRole および SQLAgentOperatorRole は、自動的に SQLAgentUserRoleのメンバーになります。 つまり、SQLAgentReaderRole および SQLAgentOperatorRole のメンバーは、SQLAgentUserRole に許可されたすべての SQL Server エージェント プロキシにアクセスし、これらのプロキシを使用できることになります。
次の表に、SQL Server エージェント オブジェクトに対する SQLAgentUserRole の権限の概要を示します。
アクション | オペレーター | ローカル ジョブ (所有しているジョブのみ) |
ジョブ スケジュール (所有しているスケジュールのみ) |
プロキシ |
---|---|---|---|---|
作成/変更/削除 | いいえ | はい ジョブの所有権は変更できません。 |
はい | いいえ |
リストの表示 (列挙) | はい sp_notify_operator および Management Studio の [ジョブのプロパティ] ダイアログ ボックスで使用できるオペレーターのリストを取得できます。 |
はい | イエス | はい プロキシのリストは、Management Studio の [ジョブ ステップのプロパティ] ダイアログ ボックスにのみ表示できます。 |
有効化/無効化 | いいえ | イエス | はい | 適用なし |
プロパティの表示 | いいえ | イエス | はい | いいえ |
実行/停止/開始 | 適用なし | はい | 適用できません | 適用なし |
ジョブ履歴の表示 | 適用なし | はい | 適用できません | 適用なし |
ジョブ履歴の削除 | 利用不可 | いいえ 所有しているジョブのジョブ履歴を削除するには、 SQLAgentUserRole のメンバーは、 sp_purge_jobhistory に対する EXECUTE 権限が明示的に許可されている必要があります。 他のジョブのジョブ履歴は削除できません。 |
適用なし | 適用なし |
アタッチ/デタッチ | 適用なし | 適用なし | はい | 利用不可 |
SQLAgentReaderRole の権限
SQLAgentReaderRole には、すべての SQLAgentUserRole の権限、および使用できるマルチサーバー ジョブのリスト、ジョブのプロパティ、およびジョブの履歴を表示する権限が含まれています。 このロールのメンバーは、所有しているジョブとジョブ スケジュールだけでなく、使用できるすべてのジョブとジョブ スケジュール、およびそのプロパティのリストを表示することもできます。 SQLAgentReaderRole のメンバーは、ジョブの所有権を変更して、所有していないジョブへのアクセス権を得ることはできません。 SQL Server Management Studio オブジェクト エクスプローラーには、 [ジョブ] ノードのみが SQLAgentReaderRole のメンバーに表示されます。
重要
SQL Server Agentdatabaseroles のメンバーに対してプロキシへのアクセスを許可する前に、セキュリティ上の影響について検討してください。 SQLAgentReaderRole のメンバーは、自動的に SQLAgentUserRoleのメンバーになります。 つまり、SQLAgentReaderRole のメンバーは、SQLAgentUserRole に対して許可されたすべての SQL Server エージェント プロキシにアクセスし、これらのプロキシを使用できることになります。
次の表に、SQL Server エージェント オブジェクトに対する SQLAgentReaderRole の権限の概要を示します。
アクション | オペレーター | ローカル ジョブ | マルチサーバー ジョブ | ジョブ スケジュール | プロキシ |
---|---|---|---|---|---|
作成/変更/削除 | いいえ | 可 (所有しているジョブのみ) ジョブの所有権は変更できません。 |
いいえ | 可 (所有しているスケジュールのみ) | いいえ |
リストの表示 (列挙) | はい sp_notify_operator および Management Studio の [ジョブのプロパティ] ダイアログ ボックスで使用できるオペレーターのリストを取得できます。 |
はい | イエス | イエス | はい プロキシのリストは、Management Studio の [ジョブ ステップのプロパティ] ダイアログ ボックスにのみ表示できます。 |
有効化/無効化 | いいえ | 可 (所有しているジョブのみ) | いいえ | 可 (所有しているスケジュールのみ) | 適用なし |
プロパティの表示 | いいえ | イエス | イエス | はい | いいえ |
プロパティの編集 | いいえ | 可 (所有しているジョブのみ) | いいえ | 可 (所有しているスケジュールのみ) | いいえ |
実行/停止/開始 | 適用なし | 可 (所有しているジョブのみ) | いいえ | 適用なし | 適用なし |
ジョブ履歴の表示 | 適用なし | はい | はい | 適用できません | 適用なし |
ジョブ履歴の削除 | 利用不可 | いいえ 所有しているジョブのジョブ履歴を削除するには、 SQLAgentReaderRole のメンバーは、 sp_purge_jobhistory に対する EXECUTE 権限が明示的に許可されている必要があります。 他のジョブのジョブ履歴は削除できません。 |
いいえ | 適用なし | 適用なし |
アタッチ/デタッチ | 適用なし | 適用なし | 適用なし | 可 (所有しているスケジュールのみ) | 適用なし |
SQLAgentOperatorRole の権限
SQLAgentOperatorRole には、SQL Server エージェントの固定データベース ロールのうち、最も高いレベルの特権が設定されています。 これには、 SQLAgentUserRole および SQLAgentReaderRoleのすべての権限が含まれています。 このロールのメンバーは、オペレーターおよびプロキシのプロパティを表示することも、サーバー上で使用できるプロキシおよび警告を列挙することもできます。
SQLAgentOperatorRole のメンバーは、ローカル ジョブおよびスケジュールに関する追加の権限を持っています。 すべてのローカル ジョブを実行、停止、または開始したり、サーバー上のローカル ジョブのジョブ履歴を削除できます。 また、サーバー上のすべてのローカル ジョブおよびスケジュールを、有効または無効にすることもできます。 ローカル ジョブまたはスケジュールを有効または無効にするには、このロールのメンバーはストアド プロシージャ sp_update_job および sp_update_scheduleを使用する必要があります。 SQLAgentOperatorRole のメンバーは、ジョブまたはスケジュールの名前か ID を指定するパラメーター、および @enabledパラメーターのみを指定できます。 他のパラメーターを指定すると、ストアド プロシージャの実行は失敗します。 SQLAgentOperatorRole のメンバーは、ジョブの所有権を変更して、所有していないジョブへのアクセス権を得ることはできません。
SQL Server Management Studio オブジェクト エクスプローラーには、 [ジョブ] 、 [警告] 、 [オペレーター] 、および [プロキシ] の各ノードのみが SQLAgentOperatorRole のメンバーに表示されます。 このロールのメンバーに表示されないのは、 [エラー ログ] ノードだけです。
重要
SQL Server Agentdatabaseroles のメンバーに対してプロキシへのアクセスを許可する前に、セキュリティ上の影響について検討してください。 SQLAgentOperatorRole のメンバーは、自動的に SQLAgentUserRole および SQLAgentReaderRoleのメンバーになります。 つまり、SQLAgentOperatorRole のメンバーは、SQLAgentUserRole または SQLAgentReaderRole に対して許可されたすべての SQL Server エージェント プロキシにアクセスし、これらのプロキシを使用できることになります。
次の表に、SQL Server エージェント オブジェクトに対する SQLAgentOperatorRole の権限の概要を示します。
アクション | 警告 | オペレーター | ローカル ジョブ | マルチサーバー ジョブ | ジョブ スケジュール | プロキシ |
---|---|---|---|---|---|---|
作成/変更/削除 | いいえ | いいえ | 可 (所有しているジョブのみ) ジョブの所有権は変更できません。 |
いいえ | 可 (所有しているスケジュールのみ) | いいえ |
リストの表示 (列挙) | はい | はい sp_notify_operator および Management Studio の [ジョブのプロパティ] ダイアログ ボックスで使用できるオペレーターのリストを取得できます。 |
はい | イエス | イエス | はい |
有効化/無効化 | いいえ | 番号 | はい SQLAgentOperatorRole のメンバーは、ストアド プロシージャ sp_update_job を使用し、 @enabled パラメーターおよび @job_id (または @job_name) パラメーターの値を指定することにより、所有していないローカル ジョブを有効または無効にできます。 このロールのメンバーが、このストアド プロシージャに対して他のパラメーターを指定した場合、プロシージャの実行は失敗します。 |
いいえ | はい SQLAgentOperatorRole のメンバーは、ストアド プロシージャ sp_update_schedule を使用し、 @enabled パラメーターおよび @schedule_id (または @name) パラメーターの値を指定することにより、所有していないスケジュールを有効または無効にできます。 このロールのメンバーが、このストアド プロシージャに対して他のパラメーターを指定した場合、プロシージャの実行は失敗します。 |
適用なし |
プロパティの表示 | はい | イエス | イエス | イエス | イエス | はい |
プロパティの編集 | いいえ | いいえ | 可 (所有しているジョブのみ) | いいえ | 可 (所有しているスケジュールのみ) | いいえ |
実行/停止/開始 | 適用なし | 適用なし | はい | 番号 | 適用なし | 適用なし |
ジョブ履歴の表示 | 適用なし | 適用なし | はい | はい | 適用できません | 適用なし |
ジョブ履歴の削除 | 適用なし | 適用なし | はい | 番号 | 適用なし | 適用なし |
アタッチ/デタッチ | 適用なし | 適用なし | 適用なし | 適用なし | 可 (所有しているスケジュールのみ) | 適用なし |
ユーザーへの複数のロールの割り当て
固定サーバー ロール sysadmin のメンバーは、SQL Server エージェントのすべての機能にアクセスできます。 sysadmin ロールのメンバーではないが、SQL Server エージェントの複数の固定データベース ロールのメンバーであるユーザーの場合、これらのロールの同心構造権限モデルについて覚えておくことが重要です。 特権レベルの高いロールには常に、そのロールよりも特権レベルが低いロールの権限がすべて含まれているため、複数のロールのメンバーであるユーザーは、そのユーザーがメンバーとして属しているロールの中で、最も特権レベルの高いロールに関連付けられた権限を自動的に持っていることになります。
関連項目
SQL Server エージェントのセキュリティの実装
sp_update_job (Transact-SQL)
sp_update_schedule (Transact-SQL)
sp_notify_operator (Transact-SQL)
sp_purge_jobhistory (Transact-SQL)