SQL Service Broker - отправка сообщения между базами данных с разными полномочиями - PullRequest
0 голосов
/ 25 апреля 2020

Я пытаюсь выяснить, как настроить надлежащую безопасность для отправки сообщения из одной базы данных в другую. У меня проблема в том, что отправляющая служба базы данных привязана к указанному c пользователю через авторизацию, потому что эта служба также отправляет сообщения на привязку удаленной службы.

Итак, вот мой сервис:

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.

Не знаю, как мне настроить разрешения, и я бы предпочел не создавать отдельную очередь.

1 Ответ

0 голосов
/ 25 апреля 2020
use appmembership
go
create user WebDbSSBUser --for login WebDbSSBUser
go
grant send on service::AppRequestService to WebDbSSBUser
go
...