2010-04-08 17 views
1

Je reçois cette erreur dans ma table sys.transmission_queue chaque fois que je tente d'envoyer un message SQL Service Broker entre deux serveurs SQL Server différents. (À savoir les bases de données sont sur deux machines physiques différentes)Aide sur le message d'erreur Service Broker

Dialog security is unavailable for this conversation because there is no security 
certificate bound to the database principal (Id: 5). 
Either create a certificate for the principal, or specify ENCRYPTION = OFF 
when beginning the conversation 

Lorsque cette erreur fait référence à « principale base de données » quoi est-il référence? (la base de données "maître"? utilisateur dbo?) J'ai utilisé la commande CREATE CERTIFICATE, sauvegardé le certificat et créé un même certificat nommé sur l'autre serveur avec le fichier .cer de sauvegarde du premier serveur, mais je continue d'obtenir message.

Toute aide serait appréciée en me faisant pointer dans la bonne direction. Je dois manquer quelque chose d'évident. Dans mon environnement de développement, les bases de données initiées et cibles étaient sur le même serveur physique et la même instance SQL, et tout fonctionnait correctement.

Répondre

2

L'erreur fait référence à un utilisateur de la base de données hébergeant votre service Service Broker (select name from sys.database_principals where principal_id = 5). En plus d'exporter un certificat vers le serveur cible, vous devez également importer le certificat du serveur cible, l'associer à un utilisateur et créer une liaison de service distant pour indiquer à Service Broker quel utilisateur local représente le service distant. Les 2 articles suivants devraient vous aider: Service Broker Dialog Security et Securing a dialog with certificates.

+1

Une autre ressource, si l'un a un compte Web SQL Server Central, est l'article suivant: http://www.sqlservercentral.com/articles/Service+Broker/2797/ – yanigisawa

+1

Il s'avère que j'avais créé le service Initiating avec: "AUTHORIZATION "; plutôt que de laisser de côté cette clause. Une fois que j'ai supprimé et recréé le service Initiating sans l'instruction AUTHORIZATION, il a commencé à fonctionner. – yanigisawa

1

En plus de ce que Pawel a dit, je recommande également d'essayer l'outil SSBDIAGNOSE. Utilisez l'option CONFIGURATION et elle vous dira exactement ce que l'utilisateur a besoin de certificats, dans quelle base de données, ainsi que l'analyse de la connectivité des terminaux, des routes et des autorisations.

+0

Merci Remus pour l'outil. Il n'a pas fini par nous aider à trouver le problème exact, mais il était utile d'identifier un problème de service_broker_guid en double lorsque nous avons restauré une sauvegarde à partir d'un autre serveur. – yanigisawa

Questions connexes