Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 вызов linked server из активационной процедуры service broker  [new]
нязнайка
Guest
Ситуация следующая :
1) есть очередь, с активационной процедурой и EXECUTE AS dbo.
шаги активационной процедуры :
1) открывается транзакция
2) получается сообщение из очереди
3) вызывается процедура с linked server.
Linked server - это ссылка на этот же сервер. Сделано для эмуляции автономной транзакции.
Он был создан вот так :

автор
EXEC sp_addlinkedserver @server = N'loopback',@srvproduct = N' ',@provider = N'SQLNCLI', @datasrc = @@SERVERNAME
GO
EXEC sp_serveroption loopback,N'remote proc transaction promotion','FALSE'


Логин пользователя (dbo) является sysadmin.

Получаю следующую ошибку :
Access to the remote server is denied because the current security context is not trusted.


Помогите пожалуйста настроить права, чтобы можно было обращаться к самому себе.
21 ноя 12, 20:28    [13510024]     Ответить | Цитировать Сообщить модератору
 Re: вызов linked server из активационной процедуры service broker  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
А зачем такой изврат? И давно selflink стал представлять из себя автономную транзакцию?
21 ноя 12, 21:44    [13510232]     Ответить | Цитировать Сообщить модератору
 Re: вызов linked server из активационной процедуры service broker  [new]
нязнайка
Guest
А зачем такой изврат? И давно selflink стал представлять из себя автономную транзакцию?


C 2008. А вы как автономномные транзакции реализуете ? clr ?

У clr и гипертрйдинг несовместимы, а то то серьезный недостаток. Когда инстанс используется не одним приложением не всегда его отключишь.

А автономная транзакция нужна для генерация номера.
22 ноя 12, 01:31    [13510907]     Ответить | Цитировать Сообщить модератору
 Re: вызов linked server из активационной процедуры service broker  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
автор
C 2008.


Это из разряда прострелить себе ногу, когда "автономная транзакция" будет работать без SET XACT_ABORT.

автор
А вы как автономномные транзакции реализуете ?


Как то без них все обходился.

автор
У clr и гипертрйдинг несовместимы, а то то серьезный недостаток.


Вы путаете теплое с мягким. Hyper-threading и Fiber Mode.

автор
А автономная транзакция нужна для генерация номера.


Гм... А без нее номера не генерятся, что-ли?
22 ноя 12, 07:44    [13511101]     Ответить | Цитировать Сообщить модератору
 Re: вызов linked server из активационной процедуры service broker  [new]
dalex1973
Member

Откуда: Польша
Сообщений: 287
Читаем в BOL:
BOL
Одним из лучших методов устранения неполадок хранимых процедур активации служит выключение активации очереди и запуск хранимой процедуры из среды SQL Server Management Studio (или с помощью служебной программы sqlcmd). Запуск хранимой процедуры в интерактивном сеансе позволяет увидеть любые ошибки, возвращаемые хранимой процедурой.

Но если хранимая процедура активирована компонентом Database Engine, параметры базы данных и контекст безопасности могут измениться. Перед запуском процедуры укажите, с помощью инструкции EXECUTE AS, в качестве пользователя сеанса пользователя, указанного для активации, и установите параметры сеанса в значения по умолчанию для базы данных.


Также статья по английски:тут

Резюмируя, методы решения:
1. SET TRUSTWORTY ON;
2. Подписывание SP сертификатом (более правильное).
22 ноя 12, 11:32    [13511913]     Ответить | Цитировать Сообщить модератору
 Re: вызов linked server из активационной процедуры service broker  [new]
нязнайка
Guest
Спасибо за отзывы.

Да, действительно путал понятия hyper-threading и fiber mode.

По поводу сертификата :
Пробовал вот так :


CREATE CERTIFICATE FirstCertificate 
ENCRYPTION BY PASSWORD = 'qwerty'
WITH SUBJECT = 'sign generate procedure',
START_DATE = '2012-01-01',
EXPIRY_DATE = '2100-01-01'
GO     
 
 CREATE USER CertificatedUser
 FROM CERTIFICATE FirstCertificate      

GO 
  GRANT EXECUTE  ON SCHEMA::Utils TO CertificatedUser

GO 
ADD SIGNATURE TO Utils.Generate  BY CERTIFICATE FirstCertificate WITH PASSWORD = 'qwerty' ;
 


Utils - это схема, где находится процедура генерации (Utils.Generate - сама процедура)

Но ошибка не исчезает, все так же получаю :
Access to the remote server is denied because the current security context is not trusted.


И очередь стопорится.
22 ноя 12, 13:01    [13512602]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить