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

SQL Service Broker - Send Message Between databases with different Authorizations

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

这是我的服务:

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)

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

An exception occurred while enqueueing a message in the target queue. Error: 916, State: 3. The server principal "S-1-9-3-1771139253-1243890769-2689325230-2851569174" is not able to access the database "appmembership" under the current security context.

sid 是 WebDbSSBUser。

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

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