Возможен ли запрос кросс-схемы с разными правами доступа?

В настоящее время я использую SQL Server 2012, и у меня есть вопрос, касающийся кросс-схемы доступа с различными правами доступа:

Допустим, у меня есть две схемы: UserSchema и TableSchema.

TableSchema содержит 2 таблицы, и эта схема доступна только администратору, для чтения, обновлений и т. Д.

UserSchema должен быть доступен пользователям с SELECT-правами (или как бы вы ни называли права на чтение). Эта схема содержит представление, которое должно выбирать данные из двух таблиц в TableSchema.

Моя идея заключается в том, что пользователи UserSchema должны иметь доступ только к UserSchema, но не иметь доступа к TableSchema. Будет ли это работать? Или запрос представления не будет работать из-за отсутствия разрешения на чтение данных непосредственно из таблиц? Есть ли хорошее решение, чтобы обойти это, или мне придется забыть об этой идее и дать пользователям доступ для чтения к TableSchema?

Ответ на основной вопрос, вероятно, очевиден, но я, кажется, нахожу несколько иные ответы, когда пытаюсь найти его в Google, так что это более или менее вопрос да или нет, чтобы подтвердить или опровергнуть идею.

1 ответ

Решение

Пока владелец каждой из схем одинаков, этот подход будет работать нормально, потому что цепочка владения не нарушена.

Смотрите следующую ссылку для более подробной информации:

Цепочки владения

Например, это будет работать:

  • UsersSchema Владелец dbo

  • TableSchema Владелец dbo

  • Пользователь1 предоставляет право выбора на UsersSchema, отказывает в разрешении выбора на TableSchema

  • view1 живет в UsersSchema (выбирается из Table1)

  • table1 живет в TableSchema

user1 делает выбор * из UsersSchema.view1 - SQL-сервер проверяет, что user1 имеет разрешения на выбор из представления, что он делает, все хорошо

Затем SQL-сервер проверяет, кому принадлежит представление, dbo-SQL-сервер затем проверяет, кому принадлежит таблица, из которой представление запрашивает данные, а также dbo (поскольку dbo владеет обеими схемами). Поскольку цепочка владения не нарушена, SQL-сервер теперь не будет проверять, что разрешения user1 имеют для table1, и данные возвращаются, даже если вы отказываете в выборе user1 для table1 или TableSchema.

user1 по-прежнему будет отказано в доступе к table1, если он попытается получить доступ к table1 напрямую.

Другие вопросы по тегам