SQL Server: можно ли ограничить доступ только к одной таблице

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

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

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

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

7 ответов


да.

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

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

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


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

важно не давать пользователю 'db_datareader' доступ ко всей базе данных. Используя пользовательский интерфейс, вы можете использовать вкладку "отображение пользователя" под логином, вы можете создать пользователя только с "открытым" доступом. Затем вы можете перейти к базе данных и предоставить пользователю выбрать доступ к определенной таблице (нажав странно названную кнопку "Поиск" в разделе Securables вешалка.)

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


GRANT SELECT ON [SchemaName].[TableName] to [UserName]

конечно. грант разрешения, которые вы хотите.

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

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


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


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


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