Запуск триггера, который вызывает хранимую процедуру в другой базе данных

Мы хотели бы запустить триггер для одной базы данных (A), который вызывает хранимую процедуру в другой базе данных (B).

CREATE TRIGGER trg_A ON Таблица A
ДЛЯ ВСТАВКИ
КАК
НАЧАТЬ
    База данных EXECB.dbo.stp_B
КОНЕЦ

Мы хотели бы сделать это как LoginA с UserA на DatabaseA. У нас также есть LoginB с UserB на DatabaseB.

Как мы можем сделать это?

В настоящее время мы получаем это сообщение об ошибке

Основной сервер "..." не может получить доступ к 
База данных "DatabaseB" в текущем контексте безопасности.

Мы пробовали WITH EXECUTE AS 'UserB'без везения.

1 ответ

Решение

Интересный вопрос. Ты обидел меня. Я протестировал кучу разных сценариев.

Это не удалось:

  1. Триггер для таблицы A ссылается на хранимую процедуру в базе данных. LoginA не существует как пользователь в DatabaseB.
  2. Триггер на tableA ссылается на хранимую процедуру в DatabaseA, которая вставляется в DatabaseB.dbo.TableB. LoginA не существует в базе данных.
  3. Создал LoginA как пользователя на DatabaseB, но не дал ему никаких прав. Повторный тест1 и тест2. Оба не удалось.
  4. Создан LoginB как пользователь на DatabaseA. Убедитесь, что LoginB может вставить в DatabaseB.dbo.TableB. Вы вошли в базу данных A как LoginA, запустили EXECUTE AS User = 'LoginB'. Пытался вставить в DatabaseA.dbo.TableA.

Единственный способ заставить триггер работать - создать пользователя в DatabaseB для LoginA и предоставить разрешения на выполнение хранимой процедуры DatabaseB.

Другие вопросы по тегам