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 вешалка.)
этот подход будет работать и со скриптом, конечно.
конечно. грант разрешения, которые вы хотите.
когда вы предоставляете пользователю доступ к базе данных, посмотрите на роли, которые им назначены, и какие права имеют эти роли.
проблема в том, что люди обычно предоставляют слишком широкие права в самом начале.
конечно, вы можете. После создания пользователя и предоставления ему доступа к базе данных предоставьте только select access (или любой необходимый уровень) этой таблице.
лучшим подходом было бы создание отдельной schema
создать proc
в этой schema
. Затем позвольте пользователю EXEC
это proc
. Вот и все. Вы можете создать view
в этой schema
и это может быть больше того, что вам нужно.
лучший способ-создать защищаемый для этой конкретной таблицы. Он спросит вас, что вы собираетесь обеспечить; таблица, представление, база данных. Затем вы выбираете конкретную таблицу для защиты и исключения этого пользователя из этой таблицы.