Sql-Server

授予目前數據庫中的數據庫角色在 msdb 中執行 SP 的權限

  • July 12, 2019

我在我目前的 SQL Server 2012 數據庫中創建了一個具有db_datareaderdb_datawriterexecute權限的角色。目前 db 中的一個過程在sp_start_jobmsdb 中呼叫。

如何授予對我的數據庫角色的訪問權限以在 msdb 中執行該過程?

我嘗試在目前數據庫中執行該過程,該數據庫呼叫sp_start_job為所有者,而作為使用者定義角色成員的使用者仍然無法執行該過程。

我已經public為登錄設置了伺服器角色,並將其映射到 msdb 數據庫,但我無法授予權限。我要執行的命令是:

GRANT EXECUTE ON OBJECT::[msdb].[dbo].[sp_start_job] TO [db_executor]

當我從 msdb 執行時,我得到的錯誤是:

找不到使用者“db_executor”,因為它不存在或您沒有權限。

當我從創建使用者定義角色的數據庫中執行時db_executor,它會引發此錯誤:

您只能授予或撤銷目前數據庫中對象的權限。

我不想將使用者添加到SQLAgentOperatorRole. 這個想法是將所有使用者分組到應用程序數據庫中的一個角色中,並且該角色的成員應該能夠在數據庫中執行呼叫sp_start_job.

以下是您應該遵循的步驟:

  1. 熟悉SQL Server 代理固定數據庫角色中的材料。
  2. 決定哪一個對你有好處
  3. 使用類似於以下的腳本(但首先選擇特定的 msdb 角色)來實現您的要求:
USE [master]
GO 
CREATE LOGIN [DOMAIN\user] FROM WINDOWS 
GO 
USE [msdb]
GO
CREATE USER [DOMAIN\user] FOR LOGIN [DOMAIN\user] 
GO
USE [msdb]
GO
EXEC sp_addrolemember N'SQLAgentOperatorRole', N'DOMAIN\user'
GO

微軟創建了允許這種事情的特殊角色

“SQL Server 代理固定數據庫角色”

授予EXECUTEsp_start_job不起作用,因為開始工作時所做的權限和檢查僅與角色成員資格相關聯。

USE msdb
ALTER ROLE SQLAgentOperatorRole ADD MEMBER DR_user;

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