2012-05-03 29 views
1

データベースユーザーにSQLAgentOperatorRoleが付与されていますが、ジョブの有効/無効を設定するとエラーが発生します。エラーメッセージは次のとおりです。SQL Serverでジョブの有効/無効を設定する権限

SELECT権限は我々が仕事sp_update_jobで有効/無効を設定し、スキーマ 'DBO'

、オブジェクトのsysjobs '、データベース 'MSDB' で拒否されました。

ありがとうございました。

コメント:

次のステートメントを実行すると、エラーが発生します。

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は2つのパラメータのみを指定でき、余分なパラメータがある場合はプロシージャが失敗します。それはあなたの問題かもしれないし、そうでないかもしれませんが、実行しているコマンドを見ずに誰も本当に助けることはできません。 – Pondlife

+0

質問を編集しました。詳細を確認してください。シナリオは次のとおりです。1. User1にはSQLAgentOperatorRole権限があり、上記の2つの呼び出しメソッドを実行します。最初の呼び出しメソッドは失敗し、もう1つは成功しました。 2. User2にはsysadminロールがあり、2つのメソッドが正常に実行されました。コメントしてくれてありがとう。 – zclmoon

答えて

2

私はこの問題を解決しました。その理由は、ユーザーのsysjobsテーブルに対するSELECT権限がないためです。したがって、ユーザーにSELECTの権限を与える必要があります。

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権限もあります。上記のように2つの呼び出しメソッドをテストしましたが、最初の呼び出しメソッドは失敗し、2つ目の呼び出しメソッドは成功しました。コメントしてくれてありがとう。 – zclmoon