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

问题描述 投票:0回答:1

我想知道如何设置适当的安全性,以便从一个数据库向另一个数据库发送消息。我遇到的问题是,发送数据库服务通过授权与特定用户绑定,因为该服务也会向远程服务绑定发送消息。

所以这是我的服务。

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。

不知道应该如何设置权限,我希望不用单独设置一个队列。

sql-server service-broker
1个回答
0
投票
use appmembership
go
create user WebDbSSBUser --for login WebDbSSBUser
go
grant send on service::AppRequestService to WebDbSSBUser
go
© www.soinside.com 2019 - 2024. All rights reserved.