Erteilen Sie Berechtigungen zum Ausführen eines SQL Server-Jobs

22

Ich habe auf meinem MSSQL Server 2005 einen Auftrag, den ich jedem Datenbankbenutzer erlauben möchte, ausgeführt zu werden.

Ich mache mir keine Sorgen um die Sicherheit, da die Eingabe für die eigentliche Arbeit des Jobs aus einer Datenbanktabelle stammt. Das Ausführen des Jobs ohne Hinzufügen von Datensätzen zu dieser Tabelle führt zu nichts.

Ich kann einfach nicht finden, wie ich dem Job öffentliche Berechtigungen erteilen kann.

Gibt es eine Möglichkeit, dies zu tun? Das Einzige, woran ich zu diesem Zeitpunkt denken kann, ist, dass der Job ständig ausgeführt wird (oder nach einem Zeitplan), aber da er nur selten (möglicherweise alle paar Monate) tatsächlich ausgeführt werden muss, möchte ich, dass die Arbeit ausgeführt wird sobald es existiert, scheint dies keine optimale Lösung zu sein.

Shahar Mosek
quelle

Antworten:

20

Sie können eine gespeicherte Prozedur erstellen, mit der der Job ausgeführt wird. Sie können with execute as ownerdie gespeicherte Prozedur als Datenbankeigentümer ausführen. Auf diese Weise benötigen die Benutzer selbst keine Berechtigungen für sp_start_job.

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

Erteilen Sie Ausführungsrechte für DoYourJob, damit Benutzer den Job starten können.

Natürlich können Sie auch den Inhalt des Jobs in eine Prozedur einfügen und die entsprechenden Rechte erteilen. Das würde mehr Interaktion ermöglichen, wie das Anzeigen eines Ergebnistextes.

Andomar
quelle
Das geht nicht. Der nicht privilegierte Benutzer kann die Prozedur ausführen, aber die Prozedur kann sp_start_job nicht ausführen, da der Benutzer keine Berechtigungen zum Ausführen hat. Ich möchte nicht, dass der Inhalt in einer Prozedur enthalten ist, da der Anrufer nicht warten muss, bis der Auftrag beendet ist.
@shaharmo: Sie können die gespeicherte Prozedur als Datenbankbesitzer ausführen lassen, ich bearbeite meine Antwort
Andomar
Funktioniert immer noch nicht. Ich bekomme den gleichen Fehler. Ich habe versucht, DoYourJob sowohl in der msdb-Datenbank als auch in meiner Datenbank mit den gleichen Ergebnissen zu erstellen.
1
@shaharmo: Seltsam, ich frage mich, wer der Datenbankeigentümer ist? Sie können auch verwenden with execute as 'loginname', funktioniert das?
Andomar
3

Grundsätzlich sind Berechtigungen erforderlich für sp_start_job(siehe Abschnitt Berechtigungen).

Die Rollen werden unter " Feste SQL Server Agent-Datenbankrollen " (von oben verlinkt) beschrieben.

Bearbeiten, Januar 2012

Nach der anonymen Ablehnung 2 Jahre nachdem ich geantwortet habe ...

Lies die Frage. Es sagt

Ich möchte jedem Datenbankbenutzer die Ausführung erlauben

dann

Ich mache mir keine Sorgen um die Sicherheit

und auch

Ich kann einfach nicht finden, wie ich dem Job öffentliche Berechtigungen erteilen kann

Daher widersprechen die folgenden Kommentare von OP der Frage

gbn
quelle
1
Erteilen Sie damit nicht allen Benutzern die Berechtigung, alle Jobs auszuführen? Ich möchte, dass sie die Berechtigung haben, nur einen bestimmten Job auszuführen.
1
Welches ist, was Sie gefragt haben ... "
Erteilen
1

Dadurch kann ein bestimmter Benutzer (Benutzer1) einen beliebigen SQL Agent-Job ausführen.

Mitglieder von SQLAgentUserRole und SQLAgentReaderRole können nur Aufträge starten, deren Eigentümer sie sind. Mitglieder von SQLAgentOperatorRole können alle lokalen Jobs starten, einschließlich der Jobs, deren Eigentümer andere Benutzer sind

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

trinkig
quelle
0

Ich muss meinem Operator auch die Berechtigung erteilen, SQL Server-Agent-Aufgaben manuell auszuführen. Ich folgte diesem Beitrag SQL Server Agent Fixed Database Roles , um die Rolle SQLAgentOperatorRole zu erteilen.

Hoffen Sie, dass diese Hilfe Ihren Fall löst.

Vu Doan
quelle
Könnten Sie die Details Ihres Tuns angeben? Nur-Link-Antworten sind "verpönt" - Link rot & c.
15.