Используя SQL Server 2008, там способ позволить, вставляет в таблицу только с помощью хранимой процедуры, и раз так как?
Править:
Лучшим способом пойти является, вероятно, предложение Martin Smith для использования INSTEAD OF, ВСТАВЛЯЮТ триггер. Прямой ответ на этот вопрос является marc_s' один с ПРЕДОСТАВЛЕНИЕМ, и ОТКЛОНИТЕ, хотя это не ограничит некоторые учетные записи пользователей.
Просто не предоставляйте никому из пользователей базы данных (и вашей «публичной» роли) разрешение INSERT для таблицы.
Предоставьте этим пользователям разрешение на выполнение хранимой процедуры INSERT - таким образом они смогут вызывать хранимую процедуру, но не могут напрямую вставлять какие-либо данные в базовую таблицу.
DENY INSERT ON dbo.YourTable TO PUBLIC
GRANT EXECUTE ON dbo.InsertDataProc TO PUBLIC
Что побуждает задать вопрос? Это потому, что хранимая процедура содержит определенную логику, которая, как вы полагаете, выполняется всякий раз, когда вставляются данные? В таком случае вы можете использовать триггер для инкапсуляции этой логики.
Если это не подходит и вы хотите, чтобы даже люди с разрешениями системного администратора не могли вставлять данные в таблицу напрямую, вы не можете, но вы можете убедиться, что это не произойдет случайно, используя INSTEAD OF INSERT
триггер, который вызывает ошибку и откатывается, если не задано определенное значение CONTEXT_INFO
, затем очищает CONTEXT_INFO
(ваша хранимая процедура может установить это значение на ожидаемое)
http://msdn.microsoft.com/en-us/library/aa214382%28SQL.80%29.aspx
Использование разрешений (грантов). Создайте SP и предоставьте право выполнить
соответствующему пользователю или роли. Затем откажитесь от вставки
прямо в таблицу, и все будет готово.
Запретите INSERT
разрешение на таблицу и предоставьте разрешение EXECUTE на хранимую процедуру.