【发布时间】:2020-04-24 23:24:45
【问题描述】:
我试图弄清楚如何设置适当的安全性以将消息从一个数据库发送到另一个数据库。我遇到的问题是发送数据库服务通过授权绑定到特定用户,因为该服务还将消息发送到远程服务绑定。
这是我的服务:
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。
不确定我应该如何设置权限,我宁愿不必设置单独的队列。
【问题讨论】:
-
另外,值得注意的是,Trustworthy 和 Broker 都已启用。
-
你不应该需要可信赖的。我在我的环境中使用无登录用户,因此我不必担心在可用性组中的所有副本上都有登录。您可以使用
create user yourUser without login;制作这些内容,它应该可以工作。