SQL Server: вы можете ограничить доступ только к одной таблице - PullRequest
17 голосов
/ 20 марта 2012

Я думаю, что ответ - нет, но я хочу дать кому-то доступ к базе данных SQL Server, но я действительно хочу, чтобы у них был доступ только к одной таблице.

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

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

Я также не уверен, что он будет работать, так как я думаю, что будет конфликт разрешений.

Ответы [ 7 ]

28 голосов
/ 20 марта 2012

Да.

exec sp_msforeachtable "DENY SELECT ON ? TO [username];"
GO

GRANT SELECT ON [schemaName].[tableName] to [username]
Go 

Хотя это работает, вам, вероятно, будет лучше управлять разрешениями, используя роли и группы AD.

8 голосов
/ 16 апреля 2013

Проблема с циклическим просмотром всех таблиц и отказом в доступе возникнет, если вы добавите новую таблицу.

Важно не предоставлять пользователю db_datareader доступ ко всей базе данных. Используя пользовательский интерфейс, вы можете использовать вкладку User Mapping под логином, вы можете создать пользователя только с «публичным» доступом. Затем вы можете перейти к базе данных и предоставить этому пользователю SELECT доступ к конкретной таблице (нажав на кнопку со странным названием «Поиск» на вкладке «Securables»).

Этот подход, конечно, будет работать и со сценарием.

3 голосов
/ 20 марта 2012
GRANT SELECT ON [SchemaName].[TableName] to [UserName]
2 голосов
/ 20 марта 2012

Конечно. GRANT необходимые вам разрешения.

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

Проблемазаключается в том, что в начале люди обычно предоставляют слишком широкие разрешения.

0 голосов
/ 16 июля 2017

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

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

Лучше было бы создать отдельный schema, создать proc в этом schema. Затем разрешите пользователю EXEC, что proc. Вот и все. Вы можете создать view в этом schema, и это может быть больше того, что вам нужно.

0 голосов
/ 20 марта 2012

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

...