Принудительно вставлять только через хранимую процедуру - PullRequest
10 голосов
/ 28 марта 2010

Используя SQL Server 2008, есть ли способ разрешить вставки в таблицу только через хранимую процедуру, и если да, то как?

EDIT:
Наилучший способ, вероятно, заключается в предложении Мартина Смита использовать триггер INSTEAD OF INSERT . Прямой ответ на этот вопрос - marc_s с GRANT и DENY, хотя он не ограничивает некоторые учетные записи пользователей.

Ответы [ 4 ]

9 голосов
/ 28 марта 2010

Только не предоставляйте пользователям базы данных (и вашей «общедоступной» роли) разрешение INSERT для таблицы.

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

DENY INSERT ON dbo.YourTable TO PUBLIC
GRANT EXECUTE ON dbo.InsertDataProc TO PUBLIC
6 голосов
/ 28 марта 2010

Запретить INSERT разрешение для таблицы и предоставить разрешение EXECUTE для хранимой процедуры.

4 голосов
/ 28 марта 2010

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

Если это не подходит, и вы хотите запретить даже людям с разрешениями sysadmin напрямую вставлять в таблицу, то вы не можете, но вы можете убедиться, что это не произошло случайно, используя INSTEAD OF INSERT триггер, который вызывает ошибку и откатывается, если не установлено определенное значение CONTEXT_INFO, а затем очищает CONTEXT_INFO (Ваша хранимая процедура может установить для этого значения ожидаемое значение)

http://msdn.microsoft.com/en-us/library/aa214382%28SQL.80%29.aspx

2 голосов
/ 28 марта 2010

Использование разрешений (грантов). Создайте SP и предоставьте право execute нужному пользователю или роли. Затем отрицать insert прямо на столе, и вы должны быть готовы.

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