web-dev-qa-db-fra.com

Accorder des autorisations pour exécuter un travail SQL Server

J'ai un travail sur mon serveur MSSQL 2005, que je veux autoriser n'importe quel utilisateur de base de données à exécuter.

Je ne m'inquiète pas pour la sécurité, car l'entrée du travail réel du travail provient d'une table de base de données. Le simple fait d'exécuter le travail sans ajouter d'enregistrements à cette table ne fera rien.

Je n'arrive pas à trouver comment accorder des autorisations publiques au travail.

Y a-t-il un moyen de faire ça? La seule chose à laquelle je peux penser à ce stade est d'avoir le travail en cours d'exécution (ou selon un calendrier), mais comme il n'a besoin de faire que rarement un travail réel (peut-être une fois tous les quelques mois) et je veux que le travail soit fait dès qu'il existe, cela ne semble pas être une solution optimale.

22
Shahar Mosek

Vous pouvez créer une procédure stockée qui exécute le travail. Vous pouvez utiliser with execute as owner pour exécuter la procédure stockée en tant que propriétaire de la base de données. De cette façon, les utilisateurs eux-mêmes n'ont pas besoin de permissons sur sp_start_job.

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

Accordez des droits d'exécution sur DoYourJob pour permettre aux utilisateurs de démarrer le travail.

Bien sûr, vous pouvez également placer le contenu du travail dans une procédure et accorder des droits pour l'exécuter. Cela permettrait plus d'interaction, comme l'affichage d'un texte de résultat.

20
Andomar

Fondamentalement, des autorisations sont nécessaires sur sp_start_job (voir la section autorisations).

Les rôles sont décrits dans " Rôles de base de données fixes de l'Agent SQL Server " (liés par le haut)

Edit, janv 2012

Après le downvote anonyme 2 ans après avoir répondu ...

Lisez la question. Ça dit

Je souhaite autoriser tout utilisateur de base de données à s'exécuter

puis

Je ne suis pas inquiet pour la sécurité

et aussi

Je n'arrive pas à trouver comment accorder des autorisations publiques au travail

Les commentaires d'OP ci-dessous contredisent la question

3
gbn

Cela permettra à un utilisateur spécifique (utilisateur1) d'exécuter n'importe quel travail d'agent SQL.

Les membres de SQLAgentUserRole et SQLAgentReaderRole ne peuvent démarrer que les travaux dont ils sont propriétaires. Les membres de SQLAgentOperatorRole peuvent démarrer tous les travaux locaux, y compris ceux qui appartiennent à d'autres utilisateurs

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

1
drinky

J'ai un besoin similaire d'accorder à mon opérateur la permission d'exécuter manuellement les tâches de l'Agent SQL Server. J'ai suivi ce post Rôles de base de données fixes de l'Agent SQL Server pour accorder le rôle SQLAgentOperatorRole.

J'espère que cette aide pour résoudre votre cas.

0
Vu Doan