【问题标题】:SQL Service Broker - Send Message Between databases with different AuthorizationsSQL Service Broker - 在具有不同授权的数据库之间发送消息
【发布时间】: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; 制作这些内容,它应该可以工作。

标签: sql-server service-broker


【解决方案1】:
use appmembership
go
create user WebDbSSBUser --for login WebDbSSBUser
go
grant send on service::AppRequestService to WebDbSSBUser
go

【讨论】:

  • 我没有 WebDbSSBUser 的登录名,根据我发现的大多数文章,我只是一个没有登录名的用户。更改为登录,使用户进入目标数据库,并授予发送(如上)修复它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多