Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Разное поведение запроса из под SSMS и Delphi  [new]
Zelius
Member

Откуда: Россия, Москва
Сообщений: 1558
MSSQL 2012. Никак не могу раскопать проблему. Один и тот же запрос с вызовом процедуры, которая лезет в соседнюю базу, из приложения на Delphi возвращает ошибку The server principal "%s" is not able to access the database "%s" under the current contex, а из SSMS отрабатывает успешно! Используется Windows Authorization, база одна и та же. На данный момент под дельфей запрос тоже работает, после того как включили cross database ownership chaining, но остался вопрос, как он мог раньше работать из под SSMS?

С уважением, Князев Константин
28 июл 15, 12:46    [17944657]     Ответить | Цитировать Сообщить модератору
 Re: Разное поведение запроса из под SSMS и Delphi  [new]
Glory
Member

Откуда:
Сообщений: 104751
Zelius
как он мог раньше работать из под SSMS?

SA, например, не нужны никакие cross database ownership chaining
28 июл 15, 12:57    [17944715]     Ответить | Цитировать Сообщить модератору
 Re: Разное поведение запроса из под SSMS и Delphi  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
Zelius
MSSQL 2012. Никак не могу раскопать проблему. Один и тот же запрос с вызовом процедуры, которая лезет в соседнюю базу, из приложения на Delphi возвращает ошибку The server principal "%s" is not able to access the database "%s" under the current contex, а из SSMS отрабатывает успешно! Используется Windows Authorization, база одна и та же. На данный момент под дельфей запрос тоже работает, после того как включили cross database ownership chaining, но остался вопрос, как он мог раньше работать из под SSMS?

С уважением, Князев Константин


так он и работал раньше
28 июл 15, 12:58    [17944718]     Ответить | Цитировать Сообщить модератору
 Re: Разное поведение запроса из под SSMS и Delphi  [new]
Zelius
Member

Откуда: Россия, Москва
Сообщений: 1558
поработал раз, теперь опять перестал работать. с той же ошибкой. куда смотреть? впервые сталкиваюсь с такой ситуацией....
28 июл 15, 13:05    [17944753]     Ответить | Цитировать Сообщить модератору
 Re: Разное поведение запроса из под SSMS и Delphi  [new]
Кот Матроскин
Member

Откуда: Москва
Сообщений: 8933
Для начала убедиться профайлером, что запрос на сервер идет ровно тот же самый, под тем же пользователем.
28 июл 15, 13:08    [17944778]     Ответить | Цитировать Сообщить модератору
 Re: Разное поведение запроса из под SSMS и Delphi  [new]
o-o
Guest
Glory
Zelius
как он мог раньше работать из под SSMS?

SA, например, не нужны никакие cross database ownership chaining

но такую ошибку можно получить и для него.
если в процедуре вписать execute as owner.
т.к. процедуру создал dbo, то обламывается именно sa.
потому что юзер, а не логин, фигурирует в create proc with execute as.
Zelius, у вас случаем не with execute as?

К сообщению приложен файл. Размер - 64Kb
28 июл 15, 13:33    [17944916]     Ответить | Цитировать Сообщить модератору
 Re: Разное поведение запроса из под SSMS и Delphi  [new]
Zelius
Member

Откуда: Россия, Москва
Сообщений: 1558
o-o,
Да, именно execute as owner, а внутри сторит execute as login ... которому выданы права на другую базу
28 июл 15, 13:50    [17945008]     Ответить | Цитировать Сообщить модератору
 Re: Разное поведение запроса из под SSMS и Delphi  [new]
Zelius
Member

Откуда: Россия, Москва
Сообщений: 1558
Сделал трассы, смотрю, разница пока в том, что Delphi генерирует RPC:Starting, а SSMS - SQL:BatchStarting... судя по трассе, запрос из SSMS спокойно переключилсы на sa, а потом на нужного пользователя...
28 июл 15, 14:10    [17945104]     Ответить | Цитировать Сообщить модератору
 Re: Разное поведение запроса из под SSMS и Delphi  [new]
o-o
Guest
нет.
разница в том, что в одном случае вы просто делаете
execute as login в батче,
а в другом случае вы это же самое в процедуру сложили, добавив execute as.
попробуйте вызвать процедуру из студии, вон как у меня, exec usp_test;.
и получите ту же самую ошибку.

потому что, еще раз, в процедуре в НЕ логин, а юзер.
так что вы хоть и становитесь тем, кто овнер, но только в пределах *базы*.
не на сервере и не в другой базе.

либо открыть песочницу TRUSTWORTHY (что очень плохо)
либо отказываться от идеи с with execute as.
просто отмапьте того товарища в другую базу и зачейните базы (вы же вроде уже зачейнили)
28 июл 15, 14:22    [17945167]     Ответить | Цитировать Сообщить модератору
 Re: Разное поведение запроса из под SSMS и Delphi  [new]
Zelius
Member

Откуда: Россия, Москва
Сообщений: 1558
o-o,

для проверки я взял вызов процедуры из трассы Delphi:
declare @p3 int
set @p3=NULL
exec sp_executesql N'exec  @P1 = MyProc1 
	@ID = @P2
',N'@P1 int OUTPUT,@P2 bigint',@p3 output,1111
select @p3


>либо открыть песочницу TRUSTWORTHY (что очень плохо)
Trustworthy стоит.

>либо отказываться от идеи с with execute as.
пока не хочется, так как открывать всем доступ в другую базу надо будет, а юзеров много

>просто отмапьте того товарища в другую базу и зачейните базы (вы же вроде уже зачейнили)
товарищ отмаплен, чейнинг стоит.

но почему в SSMS запрос работает????
28 июл 15, 15:11    [17945495]     Ответить | Цитировать Сообщить модератору
 Re: Разное поведение запроса из под SSMS и Delphi  [new]
o-o
Guest
Zelius
Trustworthy стоит.

на какой из баз стоит и кто овнер базы?
вернее, как у овнера базы с правами (AUTHENTICATE на вторую базу у него есть)?

Zelius
товарищ отмаплен, чейнинг стоит.

если товарищ отмаплен, чейнинг сделан, зачем процедура с with execute as?
28 июл 15, 15:19    [17945561]     Ответить | Цитировать Сообщить модератору
 Re: Разное поведение запроса из под SSMS и Delphi  [new]
o-o
Guest
Zelius
но почему в SSMS запрос работает????

вот именно это работает в студии???
declare @p3 int
set @p3=NULL
exec sp_executesql N'exec  @P1 = MyProc1 
	@ID = @P2
',N'@P1 int OUTPUT,@P2 bigint',@p3 output,1111
select @p3

MyProc1 -- это та процедура, где with execute as owner и идет в соседнюю базу?
будет работать если только на этой базе TRUSTWORTHY и у овнера AUTHENTICATE на вторую.
и если это так, то и запускаемое дельфями отработает
28 июл 15, 15:27    [17945622]     Ответить | Цитировать Сообщить модератору
 Re: Разное поведение запроса из под SSMS и Delphi  [new]
o-o
Guest
кстати.
у вас там что, двойной execute as?
т.е. сперва create proc with execute as owner
и потом еще внутри execute as login = ...?

в общем, вам же пишут в явном виде, какой это логин не попадает в соседнюю базу, так?
ели это тот, кто овнер процедуры, то значит на базе не включено TRUSTWORTHY.
т.е. eще раз проверьте
select name
from sys.databases
where is_trustworthy_on = 1;


а если там тот, кто прописан во внутреннем execute as login
то значит, именно он и не отмаплен во вторую базу
28 июл 15, 15:50    [17945820]     Ответить | Цитировать Сообщить модератору
 Re: Разное поведение запроса из под SSMS и Delphi  [new]
Zelius
Member

Откуда: Россия, Москва
Сообщений: 1558
o-o,

Да, именно это.

Только там еще одна глубина вложенности: MyProc1 вызывает MyProc2, которая уже идет в соседнюю базу. Да данный момент заставили работать путем вынесения всех execute as из MyProc2 в MyProc1:
create procedure MyProc1
...
execute as login = 'MyLogin'
exec MyProc2
revert
28 июл 15, 16:00    [17945925]     Ответить | Цитировать Сообщить модератору
 Re: Разное поведение запроса из под SSMS и Delphi  [new]
Zelius
Member

Откуда: Россия, Москва
Сообщений: 1558
o-o
кстати.
у вас там что, двойной execute as?
т.е. сперва create proc with execute as owner
и потом еще внутри execute as login = ...?

в общем, вам же пишут в явном виде, какой это логин не попадает в соседнюю базу, так?
ели это тот, кто овнер процедуры, то значит на базе не включено TRUSTWORTHY.
т.е. eще раз проверьте
select name
from sys.databases
where is_trustworthy_on = 1;


а если там тот, кто прописан во внутреннем execute as login
то значит, именно он и не отмаплен во вторую базу

да, двойной. в ошибке третий логин, мой. база в результат запроса попала, даже обе на данный момент.
28 июл 15, 16:17    [17946075]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить