Les notifications SQLDePendance fonctionnent bien connectées en tant qu'utilisateur de domaine Windows, à l'aide de la connexion fiduciée. Mais pas comme utilisateur SQL:
J'ai créé une connexion DB, utilisateur et rôle comme suit:
CREATE LOGIN myLogin WITH PASSWORD = 'somePW', CHECK_POLICY = OFF;
BEGIN CREATE USER myUser FOR LOGIN myLogin;
BEGIN CREATE ROLE "myRole" AUTHORIZATION [dbo];
EXECUTE sp_addrolemember N'myRole', N'myUser';
En outre, j'ai ajouté des autorisations, suivez ce lien
--Database level permissions
GRANT CREATE PROCEDURE to [myRole];
GRANT CREATE QUEUE to [myRole];
GRANT CREATE SERVICE to [myRole];
GRANT SUBSCRIBE QUERY NOTIFICATIONS TO [myRole];
GRANT VIEW DEFINITION TO [myRole];
--Service Broker permissions
GRANT REFERENCES ON CONTRACT::[http://schemas.Microsoft.com/SQL/Notifications/PostQueryNotification] TO [myRole];
GRANT RECEIVE ON QueryNotificationErrorsQueue TO [myRole];
et aussi essayé de changer le propriétaire de la DB comme décrit dans cet article
Cette question dba-question (visant dans la même direction) ne fournit aucune aide.
Les autorisations pour exécuter la requête et faire une sélection sur la table par la SQLDePendance sont également définies. J'ai vérifié cela à l'aide de SSMS et exécutez la requête avec la combinaison utilisateur/pw créée ci-dessus.
Maintenant, j'essaie d'utiliser la puissance sqlependency via .NET (connexion à DB est établie avec le login/utilisateur décrit ci-dessus. Exécuter SQLDePendency.Start (myConnectionstring) jette une exception (traduite de l'allemand):
Le "propriétaire" spécifié n'a pas été trouvé. Rechercher dans l'objet de la file d'attente 'SQLQUERYNOTIFITIFICICE-9741490D-4F04-1F4E-AD70-B198E85B2812' n'est pas possible car l'objet n'existe pas ou vous n'avez pas l'autorisation requise. Nom d'objet non valide 'SQLQUERYNOTIFITIFICE-9741490D-4F04-1F4E-AD70-B198E85B2812'.
Des idées qui manquent?
Après des jours de débogage, un petit réglage a fait toute la différence.
Si vous obtenez cette erreur mentionnée dans OP, veuillez vérifier le Propriétaire du rôle de DB utilisé! Il n'a pas été réglé sur dbo
dans mon cas. Changer cela a fait fonctionner - voir les commentaires pour l'histoire!
Juste pour élaborer la réponse de Nico, cette requête fixe l'erreur:
EXEC sp_changedbowner 'sa'
Le message d'erreur était
TableDependency.SqlClient.Exceptions.UserWithNoPermissionException: User without permissions.