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