1

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

オブジェクト 'sysjobs'、データベース 'msdb'、スキーマ 'dbo' に対する SELECT 権限が拒否されました

でジョブの有効/無効を設定し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 @job_name=@jobName, @enabled=@isEnable    
    END
    ELSE
    BEGIN
        SET @result = 1
    END

    SELECT  @result
END
4

2 に答える 2

0

有効化と無効化を持つエージェント オペレーター ロールを指定しましたが、SQLAgentOperatorRole メンバーは、ストアド プロシージャ sp_update_job を使用し、@enabled および @job_id (または @job_name) パラメーターの値を指定することで、所有していないローカル ジョブを有効化または無効化できます。このロールのメンバーがこのストアド プロシージャに他のパラメータを指定した場合、プロシージャの実行は失敗します。SQL Server AGNET で権限を実行する必要があります。

于 2012-05-03T08:39:27.900 に答える