SQL Server хранимые процедуры и разрешения - PullRequest
7 голосов
/ 26 июня 2011

Можно ли запретить разрешения для всего в SQL Server (например, выбрать, вставить и т. Д.) И дать временные разрешения через хранимые процедуры. Я хочу использовать только хранимые процедуры для доступа к данным в базе данных SQL.

Возможно ли это или есть другой способ?

Ответы [ 3 ]

6 голосов
/ 26 июня 2011

Это хороший шаблон, поддерживаемый моим SQL Server.

По сути, тот, кто имеет разрешения на хранимые процедуры, вообще не нуждается в каких-либо разрешениях для таблиц, если proc и таблицы имеют одного и того же владельца (обычно dbo).Это называется цепочка владения

Примечание: разрешения для таблиц просто не проверяются в этой ситуации, поэтому явные «разрешения DENY» также будут игнорироваться (DENY отличается от «нет разрешений»)

То же самое относится к представлениям, функциям и т. Д. (Например, просмотр таблицы вызовов, представление вызовов proc, ...)

5 голосов
/ 26 июня 2011

Да, это называется ownership chaining, если вы дадите разрешение на выполнение проку, пользователь сможет выполнить прок, и он будет работать, он вернет данные

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

Имейте в виду, что динамический SQL ломается ownership chaining, если у вас есть динамический SQLв хранимой процедуре вам потребуются дополнительные разрешения в этом случае

1 голос
/ 26 июня 2011

Это работает не только с хранимыми процедурами, но и с представлениями.
В общем, вы можете дать пользователю разрешение на объект «более высокого уровня», например, представление или sproc, без необходимости предоставлять такое же разрешение пользователя для базовой таблицы (таблиц).

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