Service Broker 的主密钥要求

Emm*_*uel 5 sql-server service-broker

我在各种 MSDN 页面和 SQL Server 博客中读到,Service Broker 数据库中“通常”需要主密钥。

实际上,在尝试接收消息时,我收到以下应用程序事件日志消息:

Service Broker 需要访问数据库“MDR_REPLICATION_Z”中的主密钥。错误代码:26。主密钥必须存在并且需要服务主密钥加密。

令我困惑的是,为什么当我所有的对话都设置为 ENCRYPTION = OFF 时会发生这种情况。

有没有办法在 ENCYRPTION 关闭的单个数据库中内部使用 Service Broker 而不必创建数据库主密钥?

Emm*_*uel 3

我找到了解决方案。

尽管BEGIN DIALOG 中指定的目标服务包含在同一数据库中,但我需要明确目标服务位于同一数据库中这一事实。

CURRENT DATABASE这是通过在指定目标服务时添加可选选项来完成的:

BEGIN DIALOG @dlg_handle 
FROM SERVICE CheckpointAndLogInitiatorService 
TO
SERVICE 'CheckpointAndLogTargetService', 'CURRENT DATABASE'
ON CONTRACT
CheckpointStart_CheckpointStartReply
WITH ENCRYPTION = OFF;
Run Code Online (Sandbox Code Playgroud)