Przyznaj uprawnienia do uruchamiania zadania serwera SQL

22

Mam zadanie na moim serwerze MSSQL 2005, że chcę pozwolić każdemu użytkownikowi bazy danych na uruchomienie.

Nie martwię się o bezpieczeństwo, ponieważ dane wejściowe do rzeczywistej pracy zadania pochodzą z tabeli bazy danych. Samo uruchomienie zadania bez dodania rekordów do tej tabeli nic nie da.

Po prostu nie mogę znaleźć sposobu na przyznanie publicznych uprawnień do pracy.

Czy jest na to jakiś sposób? Jedyną rzeczą, o której mogę teraz myśleć, jest ciągłe wykonywanie pracy (lub zgodnie z harmonogramem), ale ponieważ musi ona wykonywać jakąkolwiek rzeczywistą pracę rzadko (może raz na kilka miesięcy) i chcę, aby była ona wykonywana wykonane tak szybko, jak to możliwe, nie wydaje się to optymalnym rozwiązaniem.

Shahar Mosek
źródło

Odpowiedzi:

20

Możesz utworzyć procedurę składowaną, która uruchamia zadanie. Można użyć with execute as ownerdo uruchomienia procedury składowanej jako właściciela bazy danych. W ten sposób użytkownicy sami nie potrzebują uprawnień sp_start_job.

create procedure dbo.DoYourJob
with execute as owner
as
exec sp_start_job @job_name = 'YourJob'

Przyznaj uprawnienia DoYourJobdo wykonywania, aby umożliwić ludziom rozpoczęcie pracy.

Oczywiście możesz również umieścić zawartość zadania w procedurze i przyznać uprawnienia do jej uruchomienia. Umożliwiłoby to większą interakcję, na przykład wyświetlanie tekstu wynikowego.

Andomar
źródło
To nie działa Użytkownik nieuprzywilejowany może uruchomić procedurę, ale procedura nie może wykonać sp_start_job, ponieważ użytkownik nie ma uprawnień do jej wykonania. Nie chcę, aby zawartość była w procedurze, ponieważ nie chcę, aby osoba dzwoniąca musiała czekać na zakończenie zadania.
@shaharmo: Możesz wykonać procedurę przechowywaną jako właściciel bazy danych, zmienię swoją odpowiedź
Andomar
Wciąż nie działa. Otrzymuję ten sam błąd. Próbowałem utworzyć DoYourJob w bazie danych msdb, a także w mojej bazie danych, z tymi samymi wynikami.
1
@shaharmo: Dziwne, zastanawiam się, kto jest właścicielem bazy danych? Możesz także użyć with execute as 'loginname', czy to działa?
Andomar
3

Zasadniczo potrzebne są uprawnienia sp_start_job(patrz sekcja uprawnień).

Role opisano w sekcjiRole bazy danych agenta programu SQL Server ” (połączone z góry)

Edytuj, styczeń 2012 r

Po anonimowym głosowaniu 2 lata po tym, jak odpowiedziałem ...

Przeczytaj pytanie To mówi

Chcę zezwolić na uruchamianie dowolnego użytkownika bazy danych

następnie

Nie martwię się o bezpieczeństwo

i również

Po prostu nie mogę znaleźć sposobu na przyznanie publicznych uprawnień do pracy

Poniższe komentarze OP są zatem sprzeczne z tym pytaniem

gbn
źródło
1
Czy to nie da wszystkim użytkownikom uprawnień do uruchamiania wszystkich zadań? Chcę, aby mieli uprawnienia do wykonywania tylko jednego konkretnego zadania.
1
O to prosiłeś ... „przyznaj publiczne uprawnienia do pracy”
gbn
1

Umożliwi to określonemu użytkownikowi (użytkownikowi 1) uruchomienie dowolnego zadania agenta Sql.

Członkowie SQLAgentUserRole i SQLAgentReaderRole mogą uruchamiać tylko zadania, których są właścicielami. Członkowie SQLAgentOperatorRole mogą uruchamiać wszystkie zadania lokalne, w tym te, które są własnością innych użytkowników

USE [msdb] GO CREATE USER [user1] FOR LOGIN [user1] GO USE [msdb] GO ALTER ROLE [SQLAgentOperatorRole] ADD MEMBER [user1] GO

pijany
źródło
0

Mam podobną potrzebę udzielenia pozwolenia mojemu operatorowi na ręczne wykonywanie zadań agenta SQL Server. Śledziłem ten wpis SQL Server Agent Naprawiono role bazy danych, aby nadać rolę SQLAgentOperatorRole.

Mam nadzieję, że pomoże to rozwiązać Twój przypadek.

Vu Doan
źródło
Czy mógłbyś podać szczegóły tego, co zrobiłeś? Odpowiedzi tylko na link są „marszczone” - link rot & c.
Vérace