2010-04-08 103 views
1

每当我尝试在两个不同的SQL Server服务器之间发送SQL Service Broker消息时,我都会在sys.transmission_queue表中收到此错误。 (即数据库位于两台不同的物理机器上)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 

当此错误引用“数据库主体”时,它指的是什么? (“master”数据库?dbo用户?)我已经使用了CREATE CERTIFICATE命令,备份了证书,并在第一台服务器上使用备份.cer文件在另一台服务器上创建了一个相同的已命名证书,但我不断收到信息。

任何帮助将不胜感激让我指出正确的方向。我必须失去一些明显的东西。在我的开发环境中,启动数据库和目标数据库都位于相同的物理服务器上,并且具有相同的SQL实例,并且一切正常。

回答

2

错误指的是托管Service Broker服务的数据库中的用户(select name from sys.database_principals where principal_id = 5)。

除了将证书导出到目标服务器之外,还需要导入目标服务器的证书,将其与用户关联,并创建远程服务绑定以告知Service Broker哪个本地用户代表远程服务。以下两篇文章可以帮助您:Service Broker Dialog SecuritySecuring a dialog with certificates

+1

另一个资源(如果拥有SQL Server Central Web帐户)是以下文章:http://www.sqlservercentral.com/articles/Service+Broker/2797/ – yanigisawa 2010-04-08 22:16:31

+1

事实证明,我已经创建了Initiating服务与:“授权”;而不是忽略这个条款。一旦我在没有AUTHORIZATION语句的情况下删除并重新创建启动服务,它就开始工作。 – yanigisawa 2010-04-08 22:17:45

1

除了Pawel说的外,我还建议尝试使用SSBDIAGNOSE工具。使用CONFIGURATION选项,它会告诉你用户需要什么证书,在哪个数据库中,以及分析端点连接,路由和权限。

+0

感谢Remus的工具。它并没有最终帮助我们找到确切的问题,但是当我们从另一台服务器恢复备份时,它很方便地找出了我们所遇到的重复的service_broker_guid问题。 – yanigisawa 2010-04-08 22:18:47