SQL Permissions / Securables - Могу ли я дать разрешения для «Выбрать» в представлении, которое использует другое представление, которому не предоставлено разрешение? - PullRequest
0 голосов
/ 09 июня 2009

Вот мой сценарий ...

Роль SQL

  • Staff_User

Схема

  • Люди

Таблица

  • People.Persons

  • People.PhoneNumbers

Просмотры

  • People.vtPersons - Представление vtPersons фильтрует данные из таблицы Persons, показывая только то, что принадлежит текущему вошедшему в систему пользователю.

  • People.vtPhoneNumbers - Представление vtPhoneNumbers фильтрует данные из таблицы PhoneNumbers, показывая только то, что принадлежит текущему вошедшему в систему пользователю.

  • People.vwContactInformation - Представление vwContactInformation объединяет данные из vtPersons и vtPhoneNumbers, поэтому их можно использовать в качестве запроса в Crystal Report.

Роль Staff_User получила разрешение "SELECT" для представления vwContactInformation и ничего больше.

Я получаю сообщение об ошибке, в котором говорится, что в доступе к объекту vtPhoneNumbers отказано. Должен ли я также предоставить «SELECT» разрешение на это представление? Из опыта в другой СХЕМЕ мне не пришлось это делать, и все работало хорошо. Но теперь я получаю эту ошибку во второй СХЕМЕ, которую я создал. Кто-нибудь может подсказать, что у меня есть в первой схеме, которая позволяет каскадировать разрешения для представлений, таблиц, функций и т. Д., Которые вызываются из представления, доступного для роли.

Спасибо, Джастин

1 Ответ

0 голосов
/ 09 июня 2009

Предполагается, что SQL Server (все версии)

Ошибка говорит «отказано»: если разрешения отсутствуют или неверны, вы увидите что-то вроде «не существует или нет разрешений». Исходя из этого, я бы проверил права на vtPhoneNumbers и посмотрел, был ли установлен какой-либо явный DENY. DENY всегда оценивается и имеет приоритет. (Извините, не могу найти его в BOL).

Почему:

Идея цепочек владения / цепочки означает, что если все объекты находятся в одной и той же схеме (он же владелец), разрешения для указанного объекта не проверяются.

В этом случае не следует проверять разрешения для vtPhoneNumbers и vtPersons, поскольку все представления и таблицы находятся в схеме «Люди».

Примечание. REVOKE удаляет разрешения (ранее установленные с помощью GRANT или DENY). Кто-то, возможно, использовал DENY not REVOKE для удаления предыдущего оператора GRANT на vtPhoneNumbers

...