Справка по сообщению об ошибке Service Broker

Я получаю эту ошибку в своей таблице sys.transmission_queue всякий раз, когда пытаюсь отправить сообщение SQL Service Broker между двумя разными серверами SQL Server. (т.е. базы данных находятся на двух разных физических машинах)

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 

Когда эта ошибка относится к «принципалу базы данных», на что она ссылается? («главная» база данных? пользователь dbo?) Я использовал команду CREATE CERTIFICATE, создал резервную копию сертификата и создал сертификат с таким же именем на другом сервере с резервным файлом .cer с первого сервера, но я продолжаю получать это сообщение.

Любая помощь будет оценена в том, чтобы указать мне в правильном направлении. Должно быть, я упускаю что-то очевидное.

К вашему сведению, в моей среде разработки и исходная, и целевая базы данных находились на одном физическом сервере и в одном экземпляре SQL, и все работало нормально.


person yanigisawa    schedule 08.04.2010    source источник


Ответы (2)


Ошибка относится к пользователю в базе данных, на которой размещена служба Service Broker (select name from sys.database_principals where principal_id = 5).

Помимо экспорта сертификата на целевой сервер, вам также необходимо импортировать сертификат целевого сервера, связать его с пользователем и создать привязку удаленной службы, чтобы указать компоненту Service Broker, какой локальный пользователь представляет удаленную службу. Следующие 2 статьи должны вам помочь: Безопасность диалогового окна Service Broker и < a href="http://blogs.msdn.com/sql_service_broker/archive/2008/08/26/securing-a-dialog-with-certificates.aspx" rel="nofollow noreferrer">Защита диалога с сертификатами.

person Pawel Marciniak    schedule 08.04.2010
comment
Другим ресурсом, если у вас есть веб-учетная запись SQL Server Central, является следующая статья: sqlservercentral .com/articles/Service+Broker/2797 - person yanigisawa; 09.04.2010
comment
Получается, что я создал Инициирующий сервис с: AUTHORIZATION ‹PrincipalId = 5 User›; а не опускать этот пункт. Как только я удалил и воссоздал службу Initiating без инструкции AUTHORIZATION, она начала работать. - person yanigisawa; 09.04.2010

В дополнение к тому, что сказал Павел, я бы также рекомендовал дать SSBDIAGNOSE инструмент попробовать. Используйте параметр КОНФИГУРАЦИЯ, и он точно скажет вам, каким пользователям нужны сертификаты, в какой базе данных, а также проанализирует подключение к конечной точке, маршруты и разрешения.

person Remus Rusanu    schedule 08.04.2010
comment
Спасибо Ремус за инструмент. В конечном итоге это не помогло нам найти точную проблему, но было удобно для выявления повторяющейся проблемы service_broker_guid, которая возникла у нас, когда мы восстанавливали резервную копию с другого сервера. - person yanigisawa; 09.04.2010