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.
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.
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
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
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.