SQL Service Broker - участник сервера sa не может получить доступ

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

Включаю прокер-сервис:

-- Enable Broker on Initiator
ALTER DATABASE A-DB SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
ALTER DATABASE A-DB SET ENABLE_BROKER;
ALTER AUTHORIZATION ON DATABASE::A-DB TO [sa];
ALTER DATABASE A-DB SET TRUSTWORTHY ON;
ALTER DATABASE A-DB SET MULTI_USER;
GO

Затем я создаю очереди и все такое ...

Когда я пытаюсь отправить сообщение, я вижу следующую ошибку в sys.transmission_queue:

Возникла исключительная ситуация при постановке сообщения в целевую очередь. Ошибка: 916, состояние: 3. Принципал сервера «sa» не может получить доступ к базе данных «MYDBNAME» в текущем контексте безопасности.

(Где MYDBNAME - это имя используемой базы данных)

Я ДУМАЮ, что ошибка вызвана этой строкой:

ИЗМЕНИТЬ АВТОРИЗАЦИЮ В БАЗЕ ДАННЫХ :: A-DB TO [sa];

Это может быть плохо. Но могу ли я изменить разрешение, чтобы вернуть его в прежнее состояние? Я думал, что это будет dbo, но это неправильно. Следует ли указать, кто когда-либо создавал базу данных?


person Craig    schedule 04.11.2013    source источник
comment
Пересекается ли диалог БД (инициатор в одной базе данных, цель в другой? Если да, можете ли вы проверить другую БД, если EXECUTE AS USER 'dbo' завершится успешно? Я ожидаю, что это не удастся, а затем вам нужно ALTER AUTHORIZATION ON DATABASE::[MYDBNAME] TO [sa];.   -  person Remus Rusanu    schedule 04.11.2013
comment
У меня такая же ошибка. В моем случае обе службы находятся в одной базе данных, но активированный sp в моей целевой очереди вызывает sp, который вызывает ошибки, потому что он включает соединение с [MYDBNAME]. При удаче? Решение Ремуса сработало?   -  person JM.    schedule 31.01.2014


Ответы (2)


Исключение - ошибка: 916, состояние: 3. Принципал сервера "\" не может получить доступ к базе данных "" в текущем контексте безопасности.

Ошибка: 916, состояние: 3. Принципал сервера «sa» не может получить доступ к базе данных «xxx» в текущем контексте безопасности.

Решение. Выполните команду ALTER DATABASE ... SET TRUSTWORTHY ON. техническая ссылка

Поскольку базе данных, подключенной к экземпляру SQL Server, нельзя сразу доверять, базе данных не разрешается доступ к ресурсам, выходящим за пределы базы данных, до тех пор, пока база данных не будет явно отмечена как заслуживающая доверия.

ALTER DATABASE MyDatabase SET TRUSTWORTHY ON

В моем случае и инициатор, и целевая служба находились в одной базе данных, но эта ошибка была вызвана присоединением к внешней базе данных. Alter должен быть написан для базы данных, в которой включен Svc Broker.

person JM.    schedule 03.02.2014
comment
Потому что использую SSDT. Я установил Параметры базы данных - Разное - Параметры серверного брокера: EnableBroker - person Gutzofter; 21.03.2018

Поскольку база данных является объектом уровня сервера, она должна принадлежать участнику уровня сервера. Итак, вам необходимо предоставить логин для владения базой данных. Что касается входа в систему, я обычно выбираю sa, но это может быть ваш логин или логин любого другого человека.

person Ben Thul    schedule 04.11.2013