web-dev-qa-db-ja.com

SQL Serverエージェントジョブの表示-> MSDBロール

SSMSでジョブのプロパティを表示しようとすると、オブジェクトsp_help_targetserverで実行が拒否されたというエラーが表示されます。これはMSDBのsys SPです。

ユーザーが持っている

  • SQLAgentReaderRole

  • SQLAgentUserRole

これは、ジョブ自体を表示するのに十分なはずです。これらの役割は、ADグループに割り当てられます。すべてのユーザーは、それらの権限を持つADグループに属するWinドメインユーザーです。

Management Studioがジョブを表示するためだけにsp_help_targetserverを実行しようとする理由を誰か知っていますか? sp_help_jobを実行すると機能します。

2
Vaskemaskina

SQL Serverエージェントジョブは、「ターゲットサーバー」プロパティを介して、ローカル以外のサーバーをターゲットにすることができます。

enter image description here

「複数のサーバーをターゲットにする」オプションを有効にするには、 企業全体の自動管理を可能にするマスターサーバー をセットアップする必要があります。

SSMSはmsdb.dbo.sp_help_targetserverストアドプロシージャを実行して、[ターゲット]プロパティウィンドウに表示される可能性のあるサーバーに関する詳細を取得します。

sp_help_targetserverストアドプロシージャを実行するには、ユーザー sysadminロールのメンバーである必要があります 。ユーザーがsysadminのメンバーではないではない場合、ユーザーは単にエラーメッセージを無視できます。ただし、マスターサーバー環境では、プロパティウィンドウに正確な詳細が表示されない場合があることに注意してください。

msdb.dbo.sp_help_jobを実行すると、デフォルトでsp_help_jobserverが実行されます。ただし、EXEC dbo.sp_help_job @job_name = 'some_job', @job_aspect = 'JOB';を実行すると、ターゲットサーバーはチェックされず、表示されません。これは、GUI経由ではなくても、sysadmin以外のユーザーがジョブのプロパティを確認するのに適した方法になる場合があります。

ちなみに、SQL ServerエージェントロールのMicrosoft Docsは SQLAgentReaderRoleについて

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

上記は、ユーザーがsysadminロールのメンバーである必要があることを明確に示しているsp_help_targetserverのドキュメントと矛盾しています。

3
Max Vernon

基本的に権限をリセットすることで問題を解決しました。 SQLAgentReaderおよびSQLAgentUserロールの下にあるすべてのユーザーを削除し、再度追加しました。問題が発生したユーザーに対して、SP_HELP_TARGET_SERVERSでの実行も許可されます。これは解決策ではなく、単なる回避策です。

1
Vaskemaskina