Запуск триггера, который вызывает хранимую процедуру в другой базе данных - PullRequest
2 голосов
/ 01 октября 2010

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

CREATE TRIGGER trg_A ON TableA
FOR INSERT
AS
BEGIN
    EXEC DatabaseB.dbo.stp_B
END

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

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

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

The server principal "..." is not able to access the 
database "DatabaseB" under the current security context.

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

1 Ответ

1 голос
/ 01 октября 2010

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

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

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

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

...