Sql-Server

查看 SQL Server 代理作業 -> MSDB 角色

  • April 20, 2018

當嘗試在 SSMS 中查看作業的屬性時,使用者會收到錯誤 execute was denied on the object sp_help_targetserver。這是 MSDB 中的一個 sys SP。

使用者有

  • SQLAgentReaderRole
  • SQLAgentUserRole

這應該足以查看作業本身。這些角色被分配給他們的 AD 組。所有使用者都是屬於具有這些權限的 AD 組的 Win 域使用者。

有誰知道為什麼管理工作室試圖執行sp_help_targetserver只是為了查看工作?執行sp_help_job作品。

SQL Server 代理作業可以通過“目標伺服器”屬性以非本地伺服器為目標。

在此處輸入圖像描述

為了啟用“目標多台伺服器”選項,您需要設置一個主伺服器,以實現跨企業的自動化管理

SSMS 正在執行msdb.dbo.sp_help_targetserver儲存過程以獲取有關可能在“目標”屬性視窗中列出的伺服器的詳細資訊。

為了執行sp_help_targetserver儲存過程,使用者必須是 sysadmin 角色的成員。如果使用者不是系統管理員的成員,他們可以簡單地忽略錯誤消息。但是,他們應該知道,在主伺服器環境中,屬性視窗可能無法顯示準確的詳細資訊。

msdb.dbo.sp_help_job預設情況下,執行將執行sp_help_jobserver。但是,如果您執行EXEC dbo.sp_help_job @job_name = 'some_job', @job_aspect = 'JOB';,則不會檢查目標伺服器,也不會顯示。這可能為非系統管理員使用者提供了一種查看作業屬性的好方法,儘管不是通過 GUI。

僅供參考,Microsoft Docs for SQL Server Agent Roles對 SQLAgentReaderRole 這麼說:

SQLAgentReaderRole 包括所有 SQLAgentUserRole 權限以及查看可用多伺服器作業列表、其屬性和歷史記錄的權限。此角色的成員還可以查看所有可用作業和作業計劃及其屬性的列表,而不僅僅是他們擁有的那些作業和作業計劃。SQLAgentReaderRole 成員無法更改作業所有權來訪問他們尚未擁有的作業。只有 SQL Server Management Studio 對象資源管理器中的作業節點對 SQLAgentReaderRole 的成員可見。

以上內容似乎與 Docs 不一致sp_help_targetserver,後者明確指出使用者必須是 sysadmin 角色的成員。

我已經通過基本上重置權限解決了這個問題。刪除了 SQLAgentReader 和 SQLAgentUser 角色下的所有使用者,並重新添加了它們。還授予有問題的使用者在 SP_HELP_TARGET_SERVERS 上執行。這不是解決方案,而只是一種解決方法。

引用自:https://dba.stackexchange.com/questions/204521