SQL Service Broker-在具有不同授权的数据库之间发送消息



我正试图弄清楚如何设置适当的安全性,以便将消息从一个数据库发送到另一个数据库。我遇到的问题是,发送数据库服务通过授权绑定到特定用户,因为该服务还向远程服务绑定发送消息。

这是我的服务:

CREATE SERVICE [WebRequestService]
AUTHORIZATION WebDbSSBUser
ON QUEUE [dbo].[WebRequestQueue]
([RequestContract],[CountRequestContract],[OrderRequestContract]);
GO

我还想从该服务向不同本地数据库中的另一个服务发送消息。该服务是:

CREATE SERVICE [AppRequestService]
AUTHORIZATION DBO
ON QUEUE [dbo].AppRequestQueue
([RequestContract]);

AppRequestService不必向任何远程绑定发送消息,因此它由DBO授权。当我尝试发送:

declare @handle uniqueidentifier
begin dialog conversation @handle from service [WebRequestService] to service 'AppRequestService' on contract [RequestContract];
send on conversation @handle message type [AppRequest] (@item_data)

我在传输日志中得到了这个:

将消息排入目标队列时发生异常。错误:916,状态:3。服务器主体"S-1-9-3-1771139253-1243890769-2689325230-2851569174"无法在当前安全性下访问数据库"appmembership"上下文

sid是WebDbSSBUser。

不确定我应该如何设置权限,我希望不必设置单独的队列。

use appmembership
go
create user WebDbSSBUser --for login WebDbSSBUser
go
grant send on service::AppRequestService to WebDbSSBUser
go

最新更新