SSMSでジョブのプロパティを表示しようとすると、オブジェクトsp_help_targetserver
で実行が拒否されたというエラーが表示されます。これはMSDBのsys SPです。
ユーザーが持っている
SQLAgentReaderRole
SQLAgentUserRole
これは、ジョブ自体を表示するのに十分なはずです。これらの役割は、ADグループに割り当てられます。すべてのユーザーは、それらの権限を持つADグループに属するWinドメインユーザーです。
Management Studioがジョブを表示するためだけにsp_help_targetserver
を実行しようとする理由を誰か知っていますか? sp_help_job
を実行すると機能します。
SQL Serverエージェントジョブは、「ターゲットサーバー」プロパティを介して、ローカル以外のサーバーをターゲットにすることができます。
「複数のサーバーをターゲットにする」オプションを有効にするには、 企業全体の自動管理を可能にするマスターサーバー をセットアップする必要があります。
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
のドキュメントと矛盾しています。
基本的に権限をリセットすることで問題を解決しました。 SQLAgentReaderおよびSQLAgentUserロールの下にあるすべてのユーザーを削除し、再度追加しました。問題が発生したユーザーに対して、SP_HELP_TARGET_SERVERSでの実行も許可されます。これは解決策ではなく、単なる回避策です。