Sql-Server-2008-R2

SQL 代理權限 - 作業級別

  • June 25, 2014

我們目前有一個執行 SSIS 包的 SQL 作業。報告需要包的輸出。因此,可以按需創建報告的應用程序首先嘗試執行執行包的作業。因為這是由不同的人在不同的時間執行的,所以以前的處理方法是將 SQLAgentOperatorRole 授予負責啟動報告的任何人。出於顯而易見的原因,我真的寧願不擔任這個角色(而且我不是負責開創先例的人)。

據我所知,您不能將工作級別權限授予任何一組人。我見過關於代理的事情,但不確定這會有所幫助。那麼,我如何授予 X 使用者訪問權限:

  • 檢查作業狀態(目前通過 sp_help_job)
  • 執行此作業,且僅執行此作業

我們正在執行 SQL2008R2。

首先,確保您有一個msdb與其登錄相關聯的使用者。

USE msdb;
GO
CREATE USER username FROM LOGIN loginname;

接下來,拒絕對該使用者執行 sp_help_job 和 sp_start_job。

USE msdb;
GO
DENY EXECUTE ON dbo.sp_help_job TO [username];
DENY EXECUTE ON dbo.sp_start_job TO [username];

接下來,創建兩個以所有者身份執行的包裝儲存過程,並使用該硬編碼的 job_id 呼叫上述儲存過程。這是開始版本,幫助版本看起來非常相似。

USE msdb;
GO
CREATE PROCEDURE dbo.start_that_job
WITH EXECUTE AS OWNER
AS 
BEGIN
 SET NOCOUNT ON;

 EXEC dbo.sp_start_job @job_id = 'ACE1...';
END
GO
GRANT EXECUTE ON dbo.start_that_job TO [username];
GO

現在,他們必須直接呼叫該儲存過程,而不是使用 UI。

測試一下:

EXECUTE AS USER = N'username';
GO
EXEC dbo.sp_start_job @job_id = 'ACE1...'; -- fails
GO
EXEC dbo.start_that_job; -- succeeds
GO
REVERT; -- this is important

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