Предоставить выбор для представления не базовой таблицы, если базовая таблица находится в другой базе данных - PullRequest
18 голосов
/ 15 декабря 2008

У меня есть представление, которое выбирает строки из таблицы в другой базе данных. Я хотел бы предоставить выборочный доступ к представлению, но не прямой доступ к базовой таблице. В представлении есть предложение where, ограничивающее количество строк.

Могу ли я предоставить select для представления, а не для базовой таблицы, или мне нужно переключиться на хранимую процедуру? Я бы предпочел не делать это последним способом.

Ответы [ 9 ]

18 голосов
/ 15 декабря 2008
GRANT SELECT ON [viewname] TO [user]

должен это сделать.

15 голосов
/ 15 декабря 2008

Если в одном из ваших комментариев вы указали, что рассматриваемая таблица находится в другой базе данных, тогда применяется цепочка владения . Я подозреваю, что где-то произошел разрыв в цепи - проверьте эту ссылку для получения полной информации.

13 голосов
/ 17 июня 2011

У меня тоже была эта проблема. Я использовал информацию по ссылке, упомянутой выше, и нашел быстрое решение. Если у вас другая схема, скажем, test и создайте пользователя utest , владельца схемы test и среди представлений в схеме test you иметь представление vTestView , основанное на таблицах из схемы dbo , при выборе которого вы получите указанную выше ошибку - нет доступа к базовым объектам. Мне было достаточно выполнить заявление

ALTER AUTHORIZATION ON test.vTestView TO dbo;

, что означает, что я меняю владельца vTextView со схемы, к которой он принадлежит ( test ), на пользователя базы данных dbo , владельца схемы dbo . После этого без каких-либо других необходимых разрешений пользователь utest сможет получить доступ к данным из test.vTestView

1 голос
/ 15 декабря 2008

Вы можете предоставлять разрешения для представления, а не для базовой таблицы. Это одна из причин, по которой людям нравится использовать представления.

Посмотрите здесь: Права доступа к объекту GRANT (Transact-SQL)

0 голосов
/ 28 декабря 2018

Способ, которым я это сделал, - дать пользователю разрешение на доступ к таблицам, к которым я не хотел. Затем выполните тонкую настройку разрешения на выбор в SSMS, разрешив только разрешение на выбор для столбцов, которые находятся в моем представлении. Таким образом, предложение select в таблице ограничено только столбцами, которые они в любом случае видят в представлении.

enter image description here

Shaji

0 голосов
/ 08 апреля 2016

У меня была эта проблема. Похоже, что хотя разрешение «View1» как часть схемы «schema1» необходимо предоставить владельцу «dbo», если View1 использует dbo.table1.

Если не использовать схему, которая не является частью dbo, эта проблема может не проявиться, и будет работать обычное решение «Предоставить пользователю право выбора».

0 голосов
/ 13 октября 2015

У меня была похожая проблема, когда я получал такое же сообщение об ошибке для пользователя. Я чувствую, что, поделившись своей ошибкой, я могу прояснить проблему, ответить на вопрос и не дать другим совершить ту же ошибку.
Я хотел, чтобы пользователь имел доступ к 4 конкретным представлениям, не имея доступа к своим базовым таблицам (или что-либо еще в БД в этом отношении).
Первоначально я дал им членство в роли базы данных «db_denydatareader», полагая, что это помешает им выбрать что-либо из любой таблицы или представления (что он и сделал - как я думал), хотя затем я предоставил «select» для этих 4 взгляды, предполагающие, что это будет работать так, как я хотел - это не так.
Правильный способ сделать это - просто , а не предоставить им роль db_datareader и просто предоставить "select" для элементов, к которым пользователь должен иметь доступ. Результатом вышесказанного было то, что пользователь не мог получить абсолютно никакого доступа за пределами этих четырех представлений - таблицы, на которых основана эта область представлений, также не доступны для этого пользователя.

0 голосов
/ 26 марта 2014

Просто имейте материализованное представление, тогда вам не нужно беспокоиться обо всех других факторах. Это сработает только в том случае, если пространство и время обновления не имеют большого значения .. материализованные представления довольно крутые.

0 голосов
/ 17 декабря 2008

Я попробовал это в одной из моих баз данных.

Чтобы заставить его работать, пользователь должен был быть добавлен в базу данных, содержащую реальные данные. Права не нужны, просто доступ.

Рассматривали ли вы сохранение представления в базе данных, на которую оно ссылается? Re юзабилити и все, если его преимущества могут последовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...