Запуск триггера, который вызывает хранимую процедуру в другой базе данных
Мы хотели бы запустить триггер для одной базы данных (A), который вызывает хранимую процедуру в другой базе данных (B).
CREATE TRIGGER trg_A ON Таблица A ДЛЯ ВСТАВКИ КАК НАЧАТЬ База данных EXECB.dbo.stp_B КОНЕЦ
Мы хотели бы сделать это как LoginA с UserA на DatabaseA. У нас также есть LoginB с UserB на DatabaseB.
Как мы можем сделать это?
В настоящее время мы получаем это сообщение об ошибке
Основной сервер "..." не может получить доступ к База данных "DatabaseB" в текущем контексте безопасности.
Мы пробовали WITH EXECUTE AS 'UserB'
без везения.
1 ответ
Решение
Интересный вопрос. Ты обидел меня. Я протестировал кучу разных сценариев.
Это не удалось:
- Триггер для таблицы A ссылается на хранимую процедуру в базе данных. LoginA не существует как пользователь в DatabaseB.
- Триггер на tableA ссылается на хранимую процедуру в DatabaseA, которая вставляется в DatabaseB.dbo.TableB. LoginA не существует в базе данных.
- Создал LoginA как пользователя на DatabaseB, но не дал ему никаких прав. Повторный тест1 и тест2. Оба не удалось.
- Создан LoginB как пользователь на DatabaseA. Убедитесь, что LoginB может вставить в DatabaseB.dbo.TableB. Вы вошли в базу данных A как LoginA, запустили EXECUTE AS User = 'LoginB'. Пытался вставить в DatabaseA.dbo.TableA.
Единственный способ заставить триггер работать - создать пользователя в DatabaseB для LoginA и предоставить разрешения на выполнение хранимой процедуры DatabaseB.