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

Откуда:
Сообщений: 187
Добрый день всем!

Есть тестовый вопрос, на который мне неясен ответ:

"В базе данных есть таблица "Тест1" - её владелец - DBUser - и таблица "Тест2" с владельцем "Админ". В базе также существует хранимая процедура, которая читает данные из обоих таблиц. Создаём нового пользователя - TestUser. Какие минимальные разрешения должен иметь TestUser чтобы использовать хранимую процедуру?"

На мой взгляд необходимы разрешения Select на таблицы Тест1 и Тест2 и Execute на процедуру.

Правильный ответ: Select на таблицу Тест2 и Execute на процедуру.

Вопрос: почему не требуется разрешение Select на таблицу Тест1?


Заранее всем спасибо!
4 окт 12, 12:59    [13267043]     Ответить | Цитировать Сообщить модератору
 Re: Тестовый вопрос  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Потому что ownership chains.
4 окт 12, 13:01    [13267058]     Ответить | Цитировать Сообщить модератору
 Re: Тестовый вопрос  [new]
Цепочки владения
Guest
вы не все данные привели, кто владелец процедуры (я полагаю, что DBUser)


Цепочки владения
4 окт 12, 13:08    [13267124]     Ответить | Цитировать Сообщить модератору
 Re: Тестовый вопрос  [new]
Михаил Фв
Member

Откуда:
Сообщений: 187
Спасибо всем за ответы! Да,я действительно забыл про владельца процедуры - это "Админ".

Т.е. вновь созданный пользователь НЕ является владельцем никаких объектов.
4 окт 12, 14:04    [13267644]     Ответить | Цитировать Сообщить модератору
 Re: Тестовый вопрос  [new]
тогда Тест1
Guest
Михаил Фв
Спасибо всем за ответы! Да,я действительно забыл про владельца процедуры - это "Админ".

Т.е. вновь созданный пользователь НЕ является владельцем никаких объектов.


если владелец процедуры админ, и он же владелец таблицы Тест2,
то надо давать SELECT на Тест1 (+ EXECUTE)
4 окт 12, 14:32    [13267957]     Ответить | Цитировать Сообщить модератору
 Re: Тестовый вопрос  [new]
Михаил Фв
Member

Откуда:
Сообщений: 187
...а почему не надо давать Select на обе таблицы - здесь ведь никаких цепочек нет, пользователь-то новый ничем не владеет???
4 окт 12, 14:57    [13268248]     Ответить | Цитировать Сообщить модератору
 Re: Тестовый вопрос  [new]
тогда Тест1
Guest
так не прочел что-ли про цепочки владения?
админ же хозяин процедуры + хозяин таблицы
4 окт 12, 15:01    [13268278]     Ответить | Цитировать Сообщить модератору
 Re: Тестовый вопрос  [new]
Михаил Фв
Member

Откуда:
Сообщений: 187
Прочитал, но не вижу в вопросе похожей ситуации: какая здесь предполагается цепочка? Разве тут есть что-то подобное этому:

http://msdn.microsoft.com/ru-ru/library/ms188676%28v=sql.105%29.aspx?ppud=4
"Представление July2003 требует данные из представления SalesXZ. SQL Server проверяет владение SalesXZ. Владелец этого представления (Мэри) такой же, как у вызывающего представления, поэтому разрешения для SalesXZ не проверяются. Возвращаются необходимые данные." ?

"админ же хозяин процедуры + хозяин таблицы " - но это не значит, что по аналогии с вышесказанным таблица 2 будет требовать записи из таблицы 1.
Здесь просто есть какая-то процедура, которая читает из двух таблиц - например, select * from T1, select * from T2, а не заставляет таблицу 1 обращаться к таблице 2.

Более того, в цепочке важна последовательность обращений: на первый объект у пользователя должно быть разрешение - на последующие разрешения приедут по цепочке. В вопросе же о последовательности опроса таблиц ничего не сказано.
4 окт 12, 15:28    [13268498]     Ответить | Цитировать Сообщить модератору
 Re: Тестовый вопрос  [new]
invm
Member

Откуда: Москва
Сообщений: 9827
Михаил Фв,

Невнимательно прочитали или не поняли. У вас цепочка владения: Админ.Процедура -> Админ.Тест2
4 окт 12, 16:18    [13268952]     Ответить | Цитировать Сообщить модератору
 Re: Тестовый вопрос  [new]
Михаил Фв
Member

Откуда:
Сообщений: 187
invm, действительно, я был не прав - цепочка есть, только ответ неправильный: смысл цепочки в том, чтобы не проверять разрешения на объектах с ОДИНАКОВЫМИ владельцами, так что давать разрешение SELECT на Тест2 не надо, оно и так будет, - необходимо дать разрешение на таблицу Тест1 с другим владельцем (DBUser), как сказано здесь:

"Представление AcctAgeXZ требует данные из представления ExpenseXZ. SQL Server проверяет владение таблицы ExpenseXZ. Владелец этой таблицы иной, чем у предшествующего объекта(Джо, а не Сэм), поэтому должны быть получены полные сведения о разрешениях на эту таблицу. Если таблица ExpenseXZ имеет разрешения, которые обеспечивают доступ со стороны пользователя Алекс, сведения возвращаются."

...о чём и написал guest: "если владелец процедуры админ, и он же владелец таблицы Тест2,
то надо давать SELECT на Тест1 (+ EXECUTE) "
4 окт 12, 16:59    [13269371]     Ответить | Цитировать Сообщить модератору
 Re: Тестовый вопрос  [new]
Михаил Фв
Member

Откуда:
Сообщений: 187
P.S. Всем ещё раз спасибо!
4 окт 12, 17:00    [13269380]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить