Возможен ли запрос кросс-схемы с разными правами доступа?
В настоящее время я использую 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 напрямую.