Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 SELECT 1 vs EXEC('SELECT 1')  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
Обычно в осадок выпасть мне тяжело, но сегодня это клиенту удалось. Накрутили что-то с правами, что внутри хранимки нельзя использовать динамику EXEC. Обьясните добрые люди в какую сторону копать?

Ибо такой код как оказывается выполнить нельзя:

EXEC('SELECT 1')

Права на базе с которой вызывается динамика: datareader, datawriter, ddladmin.
Исходя из справки права на вызов EXEC: Requires membership in the public role.

По дефолту в ней все юзера.
28 ноя 18, 11:44    [21747047]     Ответить | Цитировать Сообщить модератору
 Re: SELECT 1 vs EXEC('SELECT 1')  [new]
invm
Member

Откуда: Москва
Сообщений: 9345
А ошибка-то какая?
28 ноя 18, 11:51    [21747071]     Ответить | Цитировать Сообщить модератору
 Re: SELECT 1 vs EXEC('SELECT 1')  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
AlanDenton,

openquery, например
28 ноя 18, 11:51    [21747072]     Ответить | Цитировать Сообщить модератору
 Re: SELECT 1 vs EXEC('SELECT 1')  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
invm
А ошибка-то какая?

Код по факту выполняется от юзера с такими же правами как у меня:

EXEC ('select 1') AS USER = 'WIN\ReportAnalytics'

Msg 15517, Level 16, State 1, Line 5
Cannot execute as the database principal because the principal "WIN\ReportAnalytics" does not exist, this type of principal cannot be impersonated, or you do not have permission.

Увы посмотреть не могу что там с правами у ReportAnalytics (клиент говорит что идентично). Вопрос выше конечно нубский, но сильно такое удивило. Так что буду благодарен если ткнете в нужную сторону.
28 ноя 18, 11:59    [21747086]     Ответить | Цитировать Сообщить модератору
 Re: SELECT 1 vs EXEC('SELECT 1')  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
TaPaK
openquery, например

Попробую. Спасибо
28 ноя 18, 12:03    [21747099]     Ответить | Цитировать Сообщить модератору
 Re: SELECT 1 vs EXEC('SELECT 1')  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
Msg 7411, Level 16, State 1, Line 9
Server 'REPORTING1\REPORTING' is not configured for DATA ACCESS.

при использовании OPENQUERY. Так что увы(
28 ноя 18, 12:23    [21747147]     Ответить | Цитировать Сообщить модератору
 Re: SELECT 1 vs EXEC('SELECT 1')  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
AlanDenton
Msg 7411, Level 16, State 1, Line 9
Server 'REPORTING1\REPORTING' is not configured for DATA ACCESS.

при использовании OPENQUERY. Так что увы(

не ну тут без добавления сервера никак :)
OPENROWSET
28 ноя 18, 12:28    [21747160]     Ответить | Цитировать Сообщить модератору
 Re: SELECT 1 vs EXEC('SELECT 1')  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7754
AlanDenton,

Если я правильно понимаю, то владелец базы не существует. Но не совсем понятно, как это можно получить.
28 ноя 18, 12:31    [21747167]     Ответить | Цитировать Сообщить модератору
 Re: SELECT 1 vs EXEC('SELECT 1')  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
а вы уверены, что WIN\ReportAnalytics -- это именно индивидуальный юзер,
а не группа?
группу имперсонэйтить нельзя, вот вам пример:

К сообщению приложен файл. Размер - 13Kb
28 ноя 18, 13:00    [21747229]     Ответить | Цитировать Сообщить модератору
 Re: SELECT 1 vs EXEC('SELECT 1')  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
Yasha123
а не группа?

В sys.sysusers четко показывает что это NT Login (isntname = 1). Так что да - уверенность есть что это юзер.
28 ноя 18, 13:53    [21747325]     Ответить | Цитировать Сообщить модератору
 Re: SELECT 1 vs EXEC('SELECT 1')  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
AlanDenton
Yasha123
а не группа?

В sys.sysusers четко показывает что это NT Login (isntname = 1). Так что да - уверенность есть что это юзер.

понятия не имею, что там показывает доисторическое sys.sysusers.
могу сказать, что и моей группе это вью рисует 1 в указанной вами колонке.
тем не менее, это группа, а не индивидуальный виндовый аккаунт,
вот, пожалуйста:

К сообщению приложен файл. Размер - 23Kb
28 ноя 18, 14:11    [21747390]     Ответить | Цитировать Сообщить модератору
 Re: SELECT 1 vs EXEC('SELECT 1')  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
Yasha123, спасибо за замечание. Но по факту WINDOWS_USER показывает
28 ноя 18, 14:16    [21747397]     Ответить | Цитировать Сообщить модератору
 Re: SELECT 1 vs EXEC('SELECT 1')  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
смотрите, все возможные причины ошибки перечислены в ней самой,
т.е. имеем 3 возможности:

the principal does not exist
this type of principal cannot be impersonated
you do not have permission

что principal exists мы убедились (он есть в sys.database_principals)
что его можно имперсонэйтить -- тоже убедились, ибо это виндовый логин,
не группа и не юзер из сертификата и тому подобное
остается, что у юзера нет права имперсонэйтить.
проверьте
select HAS_PERMS_BY_NAME('WIN\ReportAnalytics', 'user', 'impersonate')
28 ноя 18, 15:45    [21747545]     Ответить | Цитировать Сообщить модератору
 Re: SELECT 1 vs EXEC('SELECT 1')  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
Yasha123
остается, что у юзера нет права имперсонэйтить.

Вы правы. Спасибо
28 ноя 18, 16:11    [21747583]     Ответить | Цитировать Сообщить модератору
 Re: SELECT 1 vs EXEC('SELECT 1')  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
AlanDenton
Исходя из справки права на вызов EXEC: Requires membership in the public role.

По дефолту в ней все юзера.

вот это, кстати, к ошибке не относится.
ошибка говорит, нет права IMPERSONATE, а не на EXEC
28 ноя 18, 16:12    [21747584]     Ответить | Цитировать Сообщить модератору
 Re: SELECT 1 vs EXEC('SELECT 1')  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
AlanDenton
Yasha123
остается, что у юзера нет права имперсонэйтить.

Вы правы. Спасибо

а, ну вот и разобрались.
пардон за повторное долбление про IMPERSONATE в предыдущем посте
28 ноя 18, 16:13    [21747585]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить