Accorder des autorisations pour exécuter un travail SQL Server


22

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 de la sécurité, car l'entrée dans le 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.

Est-ce qu'il y a 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 qu'à effectuer 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.

Réponses:


20

Vous pouvez créer une procédure stockée qui exécute le travail. Vous pouvez utiliser with execute as ownerpour 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 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 DoYourJobpour permettre aux personnes de commencer 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.


Ça ne marche pas. L'utilisateur non privilégié peut exécuter la procédure, mais la procédure ne peut pas exécuter sp_start_job, car l'utilisateur n'a pas les autorisations pour l'exécuter. Je ne veux pas que le contenu soit dans une procédure, car je ne veux pas que l'appelant doive attendre la fin du travail.

@shaharmo: Vous pouvez faire exécuter la procédure stockée en tant que propriétaire de la base de données, je modifierai ma réponse
Andomar

Ne fonctionne toujours pas. J'ai la même erreur. J'ai essayé de créer DoYourJob dans la base de données msdb, ainsi que dans ma base de données, avec les mêmes résultats.

1
@shaharmo: Étrange, je me demande qui est le propriétaire de la base de données? Vous pouvez également utiliser with execute as 'loginname', cela fonctionne-t-il?
Andomar

3

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

ensuite

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


1
Cela ne donnera-t-il pas à tous les utilisateurs les autorisations d'exécuter tous les travaux? Je veux qu'ils aient l'autorisation d'exécuter un seul travail spécifique.

1
C'est ce que vous avez demandé ... "accorder des autorisations publiques au travail"
gbn

1

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


0

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.


Pourriez-vous entrer les détails de ce que vous avez fait? Les réponses de lien uniquement sont "mal vues" - pourriture de lien & c.
Vérace
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.