Long answer I had a stored procedure like below
CREATE PROCEDURE [dbo].[startJob] @JobName nvarchar(255) as BEGIN declare @retval int EXEC @retval = msdb..sp_start_job @JobName return @retval ENDAnd runs OK for me but didnt work for a user. Problem 1 "the execute permission was denied on the object 'sp_start_job' database 'msdb'" To check this permission run this query
SELECT PR.NAME, DP.PERMISSION_NAME, DP.STATE_DESC FROM MSDB.SYS.DATABASE_PERMISSIONS DP JOIN MSDB.SYS.OBJECTS O ON DP.MAJOR_ID = O.OBJECT_ID JOIN MSDB.SYS.DATABASE_PRINCIPALS PR ON DP.GRANTEE_PRINCIPAL_ID = PR.PRINCIPAL_ID WHERE O.NAME = 'SP_START_JOB' Results NAME PERMISSION_NAME STATE_DESC TargetServersRole EXECUTE DENY SQLAgentUserRole EXECUTE GRANT USE [msdb] GO CREATE USER [domain\securitygroup] FOR LOGIN [domain\securitygroup] GO EXEC sp_addrolemember N'SQLAgentUserRole', N'domain\securitygroup' GO
Then I got
Server: Msg 14262, Level 16, State 1, Procedure sp_verify_job_identifiers, Line 61 The specified @job_name ('My Job X') does not exist.This is because the user did not have permission to run someone else's job. They need to be made a member of the SQLAgentOperatorRole to do that.
EXEC sp_addrolemember N'SQLAgentOperatorRole', N'domain\securitygroup' GOReferences:
No comments:
Post a Comment