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

Откуда:
Сообщений: 37
Добрый день, уважаемые гуру!
Имеется view следующего вида (я постарался максимально упростить до концепции):

select <список полей локальных таблиц>,
(select <поле> from <linked server....таблица> where <поле удалённой таблицы = полю локальной таблицы из верхнего списка полей>) as <название поля>
from <список локальных таблиц с сответствующими джойнами>

Выполняем select top 100 * from <view> под sa - всё пучком. Из плана видно, что удалённый запрос выполняется в последнюю очередь, как и задумано.
Выполняю то же под другим пользователем - хана. План показывает, что удалённый запрос хочет быть выполнен перед всем остальным.
Если из определения представления убрать поле, которое берётся с удалённого сервера, тоже всё в порядке.
Как заставить сервер выполнять запрос для "обычного пользователя" по тому же плану, по которому он его выполняет для sa?
Извините, что не приаттпчил планы: у меня на нетбуке небольшое разрешение, невозможно снять одной картинкой.
10 май 15, 11:41    [17623277]     Ответить | Цитировать Сообщить модератору
 Re: Разные планы запроса для sa и обычного пользователя (используется linked server)  [new]
alex_iva1
Member

Откуда:
Сообщений: 37
Да,
Microsoft SQL Server 2012 - 11.0.2100.60 (X64) Feb 10 2012 19:39:15 Copyright (c) Microsoft Corporation Enterprise Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: )
на обоих серверах
10 май 15, 11:44    [17623284]     Ответить | Цитировать Сообщить модератору
 Re: Разные планы запроса для sa и обычного пользователя (используется linked server)  [new]
alex_iva1
Member

Откуда:
Сообщений: 37
Всем спасибо, извините. Помогло:
option (loop join,force order)
10 май 15, 11:59    [17623296]     Ответить | Цитировать Сообщить модератору
 Re: Разные планы запроса для sa и обычного пользователя (используется linked server)  [new]
Glory
Member

Откуда:
Сообщений: 104760
alex_iva1
Помогло:
option (loop join,force order)

Для составления правильного плана оптимизатору нужен доступ к метаданным типа индексы, статистика и тп.
Правильным решением является не хинты, а выдача нужных прав "обычному пользователю"
11 май 15, 08:42    [17624811]     Ответить | Цитировать Сообщить модератору
 Re: Разные планы запроса для sa и обычного пользователя (используется linked server)  [new]
o-o
Guest
накатить SP1, благо у ТС 2012-ый сервер:
alex_iva1
Microsoft SQL Server 2012 - 11.0.2100.60 (X64)

DBCC SHOW_STATISTICS (Transact-SQL)
Permissions

In order to view the statistics object, the user must own the table or the user
must be a member of the sysadmin fixed server role, the db_owner fixed database role,
or the db_ddladmin fixed database role.
-- жирно не будет?

SQL Server 2012 SP1 modifies the permission restrictions and allows users with SELECT permission to use this command.
Note that the following requirements exist for SELECT permissions to be sufficient to run the command:

Users must have permissions on all columns in the statistics object

Users must have permission on all columns in a filter condition (if one exists)

To disable this behavior, use traceflag 9485.
11 май 15, 11:22    [17625007]     Ответить | Цитировать Сообщить модератору
 Re: Разные планы запроса для sa и обычного пользователя (используется linked server)  [new]
alex_iva1
Member

Откуда:
Сообщений: 37
Спасибо всм откликнувшимся. Наверное, начнём с СП1. Но это тоже небыстрая тема - там кластера, так что всё нужно делать осторожно. Что касается прав, то они, вроде как у этого юзера есть на все задействованные таблицы (select), так что каких ему ещё досыпать прав - ума не приложу :).
12 май 15, 07:40    [17626964]     Ответить | Цитировать Сообщить модератору
 Re: Разные планы запроса для sa и обычного пользователя (используется linked server)  [new]
o-o
Guest
alex_iva1,

Вы точно мой ответ прочли полностью? Мало прав на таблицы. Первое, что отсылается на линкованный сервер это exec remote_srvr.sys.sp_table_statistics2_rowset N'your_tbl', N'dbo', N'your_db', null, null, null
Посмотрите крд этой процедуры, она вызывает dbcc showstatistics, и права на выполнение этого уже не селект на табоицу, у меня жирным выделено, членство в db_owner, ddl_admin или sysadmin.
Ослабили требования в 2012 SP1
12 май 15, 09:41    [17627238]     Ответить | Цитировать Сообщить модератору
 Re: Разные планы запроса для sa и обычного пользователя (используется linked server)  [new]
alex_iva1
Member

Откуда:
Сообщений: 37
Добрый день.
Спасибо за детальную информацию. Накатили SP2, судя по всему, помогло. Но на том же запросе нарисовалась другая проблема, уже не связанная с линкед сервером, по которой я напишу отдельную ветку, если ничего не найду на эту тему в форуме.
15 май 15, 10:18    [17643458]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить