Sql-Server-2008-R2
SQL 代理權限 - 作業級別
我們目前有一個執行 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