1

我们正在尝试按照 MSDN 中的教程通过 Service Broker 在一个 SQL 引擎中的两个 SQL 实例之间进行对话。为了简单起见,我们发送 Encryption = OFF 的对话框,因此我们不需要处理 Master key、Certificate... 并且它在本地工作站中工作。

DECLARE @InitDlgHandle UNIQUEIDENTIFIER;

声明 @RequestMsg NVARCHAR(100);

开始交易;

BEGIN DIALOG @InitDlgHandle 从服务 [//InstDB/2InstSample/InitiatorService] 到 SERVICE N'//TgtDB/2InstSample/TargetService' ON CONTRACT [//BothDB/2InstSample/SimpleContract] WITH ENCRYPTION = OFF;

SELECT @RequestMsg = N'目标服务的消息。';

发送对话@InitDlgHandle MESSAGE TYPE [//BothDB/2InstSample/RequestMessage] (@RequestMsg);

选择 @RequestMsg 作为 SentRequestMsg;

提交交易;去

但是,在移动到服务器后,使用相同的脚本,目标数据库在 initDB 发出消息后的 SQL 跟踪中一直显示“找不到私钥,消息无法传递”。

我的问题是,既然我们设置了加密 = OFF,为什么目标数据库显示缺少证书?

我们使用 SQL 2005 SP2 , Windows 2003

感谢任何输入。

4

1 回答 1

1

说到聚会迟到……
以前没看过这个帖子。我不知道是否仍然有任何相关性,但可能的原因如下:

REMOTE SERVICE BINDING的存在将胜过 ENCRYPTION = OFF。这是为了允许将开发人员职责与管理员职责分开。如果应用程序需要加密,则开发人员指定 ENCRYPTION = ON 并且管理员必须提供远程服务绑定。如果应用程序不需要加密,则开发人员指定 ENCRYPTION = OFF,如果部署站点决定需要加密,即使应用程序不需要,管理员也可以提供远程服务绑定。

可以在我的网站上找到有关对话安全和身份验证工作原理的完整说明。

于 2009-07-14T19:32:01.197 回答