У нас есть приложение третьи стороной, которая хочет вызвать хранимую процедуру с использованием SQL 2005-стиля «схема» Синтаксис:Проблем с запуском хранимой процедуры, принадлежащей другим пользователем
Customer.InsertNewOrder
Это дб еще на SQL 2000 , тем не менее, поэтому мы пытаемся сделать его «похожим на схему SQL 2005» и по-прежнему работать правильно (с минимальными необходимыми разрешениями). Таким образом, мы:
- создал пользователь с именем «Клиент»
- Создал ХП принадлежит этому пользователю
- Предоставленный веб-пользователя «выполнить» права на хранимая процедура (через роль)
Предоставление нашим пользователям прав на выполнение, как правило, всего того, что требуется для запуска обработанных dbo-процессов (например, «dbo.InsertOrder»). Обычно мы не должны предоставлять явные разрешения для базовых таблиц. Но в этом случае это не работает. Мы получаем ошибку:
INSERT permission denied on object "Order"
Так что я делаю неправильно?
Как сообщить , что пользователю в этом случае запрещается. Это мой WebUser? Или это «выполняется как» пользователь Customer, а пользователю Клиента необходимы дополнительные разрешения? (Я попробовал предоставить дополнительные разрешения пользователю клиента (db_datareader и db_datawriter, даже попробовал db_owner), но это, похоже, не помогло. Db_owner не является вариантом в производстве. В любом случае.
Я полагаю, что могу предоставить явные разрешения INSERT в нужной таблице, но почему это необходимо в этом случае, если это не так, как для обработанного DBO proc?
EDIT:
я упростил ради этого вопроса. На самом деле, у меня есть несколько десятков хранимых процедур под двумя разными «схемами», которые вставляют, обновляют и выбирают из многих таблиц. Так надеясь не придется вручную детализировать разрешения на все, если я могу помочь ...
Явно предоставить разрешения на вставку для вашей таблицы пользователю. –