SQL Server Agent 固定資料庫角色

適用於:SQL ServerAzure SQL 受控執行個體

重要

Azure SQL 受控執行個體目前支援多數 (但非全部) 的 SQL Server Agent 功能。 如需詳細資料,請參閱 Azure SQL 受控執行個體與 SQL Server 之間的 T-SQL 差異

SQL Server 具有下列 msdb 資料庫固定資料庫角色,讓管理員在存取 SQL Server Agent 時具有更細微的控制權。 以下列出這些角色 (存取權限由少至多排列):

  • SQLAgentUserRole

  • SQLAgentReaderRole

  • SQLAgentOperatorRole

當使用者不是上述這些連線到 SQL Server Management Studio 中 SQL Server 其中一個角色的成員,則會看不到物件總管中的 SQL Server Agent 節點。 使用者必須是這些固定資料庫角色的其中一個成員,或是 sysadmin 固定伺服器角色的成員,才能使用 SQL Server Agent。

SQL Server Agent 固定資料庫角色的權限

SQL Server Agent 資料庫角色權限是同心而互相關聯的 -- 較多權限的角色繼承較少權限的角色在 SQL Server Agent 物件上的權限 (包括警示、操作員、作業、排程和 Proxy)。 例如,如果擁有最少權限的 SQLAgentUserRole 成員,被授與存取 proxy_A 的權限,而 SQLAgentReaderRoleSQLAgentOperatorRole 兩者的成員自動就會擁有存取此 Proxy 的權限,即使沒有明確授與他們 proxy_A 的存取權限。 如此可能會有安全性的隱含意義,將會在下列章節對於每個角色討論。

SQLAgentUserRole 權限

SQLAgentUserRole 是 SQL Server Agent 定資料庫角色中具備最少權限的角色。 它只對操作員、本機作業和作業排程擁有權限。 SQLAgentUserRole 的成員只對他們所擁有的本機作業和作業排程擁有權限。 他們無法使用多伺服器作業 (主要和目標伺服器作業),也無法變更作業擁有權來取得他們尚未擁有之作業的存取權。 SQLAgentUserRole 成員只能在 SQL Server Management Studio 的 [作業步驟屬性] 對話方塊中檢視可用 Proxy 的清單。 SQLAgentUserRole 的成員在 SQL Server Management Studio 物件總管中只能看見 [作業] 節點。

重要

在授與 SQL Server Agent 資料庫角色 的成員 Proxy 存取權之前,需考量安全性隱含意義。 SQLAgentReaderRoleSQLAgentOperatorRole 自動為 SQLAgentUserRole的成員。 這表示 SQLAgentReaderRoleSQLAgentOperatorRole 的成員可以存取所有授與 SQLAgentUserRole 的 SQL Server Agent Proxy,也可以使用這些 Proxy。

下表摘要出 SQLAgentUserRole 對 SQL Server Agent 物件所擁有的權限。

動作 操作員 本機作業

(僅擁有的作業)
作業排程

(僅擁有的排程)
Proxy
建立/修改/刪除

無法變更作業擁有權。
檢視清單 (列舉)

可以取得可用操作員的清單,以便在 sp_notify_operator 和 Management Studio 的 [作業屬性] 對話方塊中使用。
.是

只在 Management Studio 的 [作業步驟屬性] 對話方塊中可用的 Proxy 清單。
啟用/停用 .是 不適用
檢視屬性 .是 .是
執行/停止/啟動 不適用 不適用 不適用
檢視作業記錄 不適用 不適用 不適用
刪除作業記錄 不適用

SQLAgentUserRole 的成員必須明確被授與對 sp_purge_jobhistory 的 EXECUTE 權限,才能對他們擁有的作業刪除作業記錄。 他們無法刪除任何其他作業的作業記錄。
不適用 不適用
附加/卸離 不適用 不適用 不適用

SQLAgentReaderRole 權限

SQLAgentReaderRole 包括所有 SQLAgentUserRole 的權限,並擁有檢視可用的多伺服器作業清單、其屬性與記錄的權限。 此角色的成員也可以檢視所有可用作業的清單,和作業排程及其屬性,而非只有他們擁有的作業和作業排程。 SQLAgentReaderRole 成員無法變更作業擁有權來取得他們尚未擁有之作業的存取權。 SQLAgentReaderRole 的成員在 SQL Server Management Studio 物件總管中只能看見 [作業] 節點。

重要

在授與 SQL Server Agent Agentdatabaseroles 的成員 Proxy 存取權之前,需考量安全性隱含意義。 SQLAgentReaderRole 的成員自動為 SQLAgentUserRole的成員。 這表示 SQLAgentReaderRole 的成員可以存取所有授與 SQLAgentUserRole 的 SQL Server Agent Proxy,也可以使用這些 Proxy。

下表摘要出 SQLAgentReaderRole 對 SQL Server Agent 物件所擁有的權限。

動作 操作員 本機作業 多伺服器作業 作業排程 Proxy
建立/修改/刪除 是 (僅擁有的作業)

無法變更作業擁有權。
是 (僅擁有的排程)
檢視清單 (列舉)

可以取得可用操作員的清單,以便在 sp_notify_operator 和 Management Studio 的 [作業屬性] 對話方塊中使用。
.是 .是

只在 Management Studio 的 [作業步驟屬性] 對話方塊中可用的 Proxy 清單。
啟用/停用 是 (僅擁有的作業) 是 (僅擁有的排程) 不適用
檢視屬性 .是 .是 .是
編輯屬性 是 (僅擁有的作業) 是 (僅擁有的排程)
執行/停止/啟動 不適用 是 (僅擁有的作業) 不適用 不適用
檢視作業記錄 不適用 不適用 不適用
刪除作業記錄 不適用

SQLAgentReaderRole 的成員必須明確被授與對 sp_purge_jobhistory 的 EXECUTE 權限,才能對他們擁有的作業刪除作業記錄。 他們無法刪除任何其他作業的作業記錄。
不適用 不適用
附加/卸離 不適用 不適用 不適用 是 (僅擁有的排程) 不適用

SQLAgentOperatorRole 權限

SQLAgentOperatorRole 是 SQL Server Agent 固定資料庫角色中具備最多權限的角色。 它包括 SQLAgentUserRoleSQLAgentReaderRole的所有權限。 此角色的成員也可以檢視操作員和 Proxy 的屬性,並列舉出伺服器上可用的 Proxy 和警示。

SQLAgentOperatorRole 成員對本機作業和排程擁有額外的權限。 他們可以執行、停止或啟動所有本機作業,也可以刪除伺服器上任何本機作業的作業記錄。 還可以啟用或停用伺服器上所有本機作業和排程。 若要啟用或停用本機作業或排程,此角色的成員必須使用預存程序 sp_update_jobsp_update_schedule。 只有指定作業或排程名稱或識別碼的參數,以及 @enabled 參數可由 SQLAgentOperatorRole的成員指定。 如果他們指定任何其他參數,執行這些預存程序會失敗。 SQLAgentOperatorRole 成員無法變更作業擁有權來取得他們尚未擁有之作業的存取權。

SQLAgentOperatorRole 的成員可以看見 SQL Server Management Studio 物件總管中的 [作業]、[警示]、[操作員] 和 [Proxy] 節點。 只有 [錯誤記錄檔] 節點對此角色的成員是不可見的。

重要

在授與 SQL Server Agent Agentdatabaseroles 的成員 Proxy 存取權之前,需考量安全性隱含意義。 SQLAgentOperatorRole 的成員自動為 SQLAgentUserRoleSQLAgentReaderRole的成員。 這表示 SQLAgentOperatorRole 的成員可以存取所有獲授與 SQLAgentUserRoleSQLAgentReaderRole 的 SQL Server Agent Proxy,也可以使用這些 Proxy。

下表摘要出 SQLAgentOperatorRole 對 SQL Server Agent 物件所擁有的權限。

動作 警示 操作員 本機作業 多伺服器作業 作業排程 Proxy
建立/修改/刪除 是 (僅擁有的作業)

無法變更作業擁有權。
是 (僅擁有的排程)
檢視清單 (列舉)

可以取得可用操作員的清單,以便在 sp_notify_operator 和 Management Studio 的 [作業屬性] 對話方塊中使用。
.是 .是
啟用/停用 Yes

SQLAgentOperatorRole 成員可以使用預存程序 sp_update_job 並指定 @enabled@job_id (或 @job_name) 參數的值來啟用或停用不是由他們擁有的本機作業。 如果此角色的成員為此預存程序指定任何其他參數,執行程序會失敗。
Yes

SQLAgentOperatorRole 成員可以使用預存程序 sp_update_schedule 並指定 @enabled@schedule_id (或 @name) 參數的值來啟用或停用不是由他們擁有的排程。 如果此角色的成員為此預存程序指定任何其他參數,執行程序會失敗。
不適用
檢視屬性 .是 .是 .是 .是
編輯屬性 是 (僅擁有的作業) 是 (僅擁有的排程)
執行/停止/啟動 不適用 不適用 不適用 不適用
檢視作業記錄 不適用 不適用 不適用 不適用
刪除作業記錄 不適用 不適用 不適用 不適用
附加/卸離 不適用 不適用 不適用 不適用 是 (僅擁有的排程) 不適用

指派多個角色給使用者

sysadmin 固定伺服器角色的成員,可存取所有 SQL Server Agent 的功能。 如果使用者不是 sysadmin 角色的成員,但是是多個 SQL Server Agent 固定資料庫角色的成員,請記住這些角色是同心權限模型。 因為較多權限的角色永遠包含較少權限的角色的所有權限,因此使用者若為多個角色的成員,會自動擁有較多權限的角色成員所關聯的權限。

另請參閱

實作 SQL Server Agent 安全性
sp_update_job (Transact-SQL)
sp_update_schedule (Transact-SQL)
sp_notify_operator (Transact-SQL)
sp_purge_jobhistory (Transact-SQL)