每当我尝试在两个不同的SQL Server服务器之间发送SQL Service Broker消息时,我在sys.transmission_queue表中收到此错误。 (即数据库位于两台不同的物理机器上)
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实例,一切正常。
答案 0 :(得分:2)
错误是指托管Service Broker服务的数据库中的用户(select name from sys.database_principals where principal_id = 5
)。
除了将证书导出到目标服务器之外,还需要导入目标服务器的证书,将其与用户关联并创建远程服务绑定,以告知Service Broker哪个本地用户代表远程服务。以下两篇文章可以为您提供帮助:Service Broker Dialog Security和Securing a dialog with certificates。
答案 1 :(得分:1)
除了Pawel所说的内容之外,我还建议您尝试使用SSBDIAGNOSE工具。使用CONFIGURATION选项,它将告诉您用户需要哪些证书,在哪个数据库中,以及分析端点连接,路由和权限。