The EXECUTE permission was denied on the object ‘sp_start_job’, database ‘msdb’, schema ‘dbo’ – rozwiązanie problemu

Niedawno natknąłem się na problem z wywołaniem procedury sp_job_start w bazie MS SQL. Dzięki niej możemy wykonać dowolnego joba, niezależnie od harmonogramu. Aby wywołać tą procedurę, użytkownik został dodany do następujących grup:

  • SQLAgentUserRole
  • SQLAgentReaderRole
  • SQLAgentOperatorRole

Jednak nie zawsze to wystarcza i błąd dalej występuje (tak było w moim przypadku). Okazuje się, że nie wszystkie grupy miały uprawnienia do wykonywania procedury sp_job_start w bazie MSDB. Która konkretnie grupa potrzebuje tych uprawnień można sprawdzić za pomocą skryptu:

Mój wynik był następujący:

sp_start_job_permission

 

 

 

Jak widać grupa TargetServersRole ma zablokowany dostęp do tej procedury – DENY w kolumnie STATE_DESC. W celu dodania uprawnień należy wykonać poniższa komendę:

 

Po tym “zabiegu” wszystko zaczęło działać. Ktoś mógłby zapytać, po co właściwie uruchamiać joby jakimś innym użytkownikiem, przecież ich zadaniem jest uruchamianie się zgodnie z ustawionym harmonogramem?
Robi się to w celu bezpieczeństwa. Przykładowo jeżeli pracujemy na dwóch bazach danych A i B (na osobnych serwerach) i chcemy użytkownikiem z bazy A wywoływać procedury w bazie B, które wymagają dostępu do wielu składowych (tabel, procedur, widoków, funkcji itp..). Takie rozwiązanie powoduje, że dodajemy uprawnienia wykonywania tylko i wyłącznie dla danego joba i nie musimy się martwić o resztę.
Mam nadzieję, że to rozwiązanie okaże się pomocne i oszczędzi Wam trochę czasu w jego szukaniu.