J'ai une requête simple que j'exécute pour envoyer des notifications par e-mail à nos administrateurs de compte AD lorsque des comptes sont désactivés depuis plus de 30 jours. Cela fonctionne parfaitement bien lorsque je l'exécute en tant qu'administrateur système (SA), mais cela échoue lorsqu'il est exécuté à l'intérieur des tâches de l'Agent SQL Server.
Voici la requête, avec des éléments spécifiques à l'entreprise et des noms d'objets remplacés :
DÉCLARE @QueryString varchar(max)
SET @QueryString = 'Select TrackingTable.Username FROM dbName.Schema.TrackingTable inner join dbName.Schema.viewName on DisabledAccounts.username = viewName.username WHERE DATEDIFF(dd,DateDisabled,GETDATE()) > 25 AND viewName.OU = ''InactiveAccounts'''
EXEC msdb.dbo.sp_send_dbmail @profile_name = 'Profile', @body = 'Ceci est le texte du corps. Rien d'intéressant ici.
', @recipients = 'moi@mondomaine.tld', @subject='Mise à jour de l'état du compte', @query = @QueryString, @importance = 'Élevée'
Lorsque je l'exécute en tant qu'administrateur système (SA), le message est envoyé. À l'intérieur d'une tâche de l'Agent SQL Server, j'obtiens cette erreur :
Exécuté en tant qu'utilisateur : DOMAIN\MemberOfDomainAdmins. Erreur de formatage de la requête, probablement des paramètres invalides [SQLSTATE 42000] (Erreur 22050). La tâche a échoué.
L'utilisateur de domaine sous lequel s'exécute la tâche est assigné le rôle db_owner sur msdb et la base de données utilisée pour la requête attachée au message. Son schéma par défaut sur les deux bases de données est dbo.
Il est également assigné le rôle sysadmin sur le serveur et est membre du rôle DatabaseMailuserRole sur msdb. Il a également un accès privé et public au profil de messagerie de base de données utilisé par la requête.
J'ai vu des dizaines d'exemples du même problème en ligne, mais j'ai déjà suivi les étapes qui ont résolu ce problème dans les exemples que j'ai vus. Que puis-je essayer d'autre ?