Я использую статью Ремуса http://rusanu.com/2006/03/07/call-a-procedure-in-other-database-from-an-activated-procedure/ в качестве руководства.
Что я пытаюсь сделать:
У меня есть активированная хранимая процедура, которая (в активированном SP) вызывает 2 разные хранимые процедуры. Одной из этих хранимых процедур требуется доступ к таблицам в другой базе данных для поиска некоторых данных, после чего она записывает запись локально с дополнительной информацией. Поскольку я пересекаю базы данных, мои варианты
- "заслуживающий доверия" (проходит, спасибо)
- «реплицировать таблицы поиска в тот же брокер службы базы данных, в котором находится»
- «получить рабочие сертификаты» (этот подход)
Итак, я сделал следующее, но все еще не работает с «превышением времени блокировки» и «невозможно получить доступ к базе данных... в текущем контексте безопасности.
В сервисном брокере базы данных работает:
USE database_with_service_broker_and_queue
GO
CREATE CERTIFICATE mysp_Auditing ENCRYPTION
BY PASSWORD = '123457'
with subject = 'god_i_hope_this_works'
ADD SIGNATURE TO OBJECT::myschema.mystoredprocedure
BY CERTIFICATE mysp_Auditing
WITH PASSWORD = '123457'
ALTER CERTIFICATE mysp_Auditing REMOVE PRIVATE KEY
BACKUP CERTIFICATE mysp_Auditing to file = 'c:\mysp_auditing.CER'
Теперь в базе с дополнительными таблицами:
USE db_with_tables_I_need
GO
CREATE CERTIFICATE mysp_Auditing from file = 'c:\mysp_auditing.CER'
CREATE USER mysp_Auditing FROM CERTIFICATE mysp_Auditing
GRANT AUTHENTICATE to mysp_Auditing
GRANT SELECT ON TABLE1 to mysp_Auditing
GRANT SELECT on TABLE2 to mysp_Auditing
Затем я ВКЛЮЧАЮ очередь и смотрю, как прокручиваются все сообщения об ошибках. Я даже пытался изменить хранимую процедуру, чтобы добавить EXECUTE AS OWNER, но все равно не работает.
Любая помощь приветствуется.