2012-05-03 41 views
1

數據庫用戶已被授予SQLAgentOperatorRole,但設置作業啓用/禁用時仍存在錯誤。該錯誤信息是:設置作業的權限在SQL Server中啓用/禁用

SELECT權限被拒絕的對象sysjobs'數據庫 'MSDB',架構 'DBO'

我們設定的工作由sp_update_job啓用/禁用。

謝謝。

評論:

執行下面的語句時,會得到錯誤。

bool result = ObjectInstance.ExecuteStoreQuery<bool>("EXEC usp_prod_SetJobStatus @jobName={0}, @isEnable={1}", jobName, isEnable).FirstOrDefault(); 

但是,雖然使用下面的語句,它會執行成功。

ObjectInstance.ExecuteStoreCommand("EXEC msdb.dbo.sp_update_job @job_name={0}, @enabled={1}", jobName, isEnable); 

usp_prod_SetJobStatus SP:

CREATE PROCEDURE [dbo].[usp_prod_SetJobStatus] 
    @jobName VARCHAR(200), 
    @isEnable BIT 
AS 
BEGIN 
    DECLARE @jobId uniqueidentifier 
    DECLARE @result BIT 

    SELECT @jobId = job_id FROM msdb.dbo.sysjobs WHERE name = @jobName 
    IF(@jobId IS NOT NULL) 
    BEGIN 
     EXEC @result = msdb.dbo.sp_update_job @[email protected], @[email protected]  
    END 
    ELSE 
    BEGIN 
     SET @result = 1 
    END 

    SELECT @result 
END 
+0

你使用的確切命令是什麼?該文檔說,SQLAgentOperatorRole只能指定兩個參數,如果有額外的參數,那麼該過程將失敗。這可能是也可能不是你的問題,但是沒有看到你正在執行的命令,沒有人能真正幫助你。 – Pondlife

+0

我編輯了這個問題。請查看詳細信息。該場景是:1.用戶1具有SQLAgentOperatorRole權限,並執行上述兩種調用方法,第一個失敗,而另一個成功。 2. User2具有sysadmin角色,這兩個方法已成功執行。感謝您的意見。 – zclmoon

回答

2

我已經解決了這個問題。原因是用戶在sysjobs表上沒有SELECT權限。所以,我們需要爲用戶授予SELECT perssion。

USE msdb 
GRANT SELECT ON msdb.dbo.sysjobs TO useName 
0

你給代理運營商角色的有啓用和禁用,但SQLAgentOperatorRole成員可以啓用或禁用不屬於他們的地方工作,通過使用存儲過程sp_update_job並指定值用於@enabled和@job_id(或@job_name)參數。如果此角色的成員爲此存儲過程指定了任何其他參數,則該過程的執行將失敗。您必須在sql server agnet上執行權限。

+0

我已編輯該問題,請查看詳細信息。用戶還擁有SQLAgentOperatorRole權限。我已經測試了兩種調用方法,但第一種失敗,第二種失敗。感謝您的意見。 – zclmoon