2012-06-13 4 views
0

My webapp необходимо прочитать, написать (ВСТАВИТЬ, ОБНОВИТЬ, УДАЛИТЬ) и выполнить хранимые процедуры в базе данных SQL 2008 с пятью схемами.Должен ли пользователь быть владельцем схемы для чтения, записи и выполнения SP?

Я создал пользователя, который проходит аутентификацию через SQL и предоставил пользователю db_datareader, db_datawriter и db_procedureexec через Security -> Logins -> (Username) Properties -> User Mappings. Затем я настроил приложение для подключения к базе данных, используя имя пользователя и правильный пароль, но при попытке выполнить хранимую процедуру, получили эту ошибку:

The EXECUTE permission was denied on the object '(stored procedure name)', database '(new database)', schema '(schema 1)'. 

Обнаружение этого пользователя в разделе Безопасность базы данных, я сделал его владельцем пяти схем в БД.

Предоставил ли я слишком много привилегий? Должен ли пользователь прикладного уровня быть владельцем схемы для того, чтобы читать, писать и выполнять процедуры?

+0

Вы определили разрешения для правой базы данных? – Oded

ответ

2

Нет, пользователь приложения не должен быть владельцем схемы, чтобы читать, писать и выполнять процедуры.

Вы можете сказать что-то вроде:

GRANT EXEC ON SCHEMA::whatever TO [user]; 

Это позволит им выполнять процедуры в [любой] схеме. Чтобы не требовать транзитивных привилегий (например, ваши процедуры выполняют динамический SQL), вы можете рассмотреть возможность их установки на EXECUTE AS OWNER.

0

Вы не хотите предоставлять пользователю права доступа к базе данных приложения. Это, по сути, дает им корзину бланш. Что вам нужно сделать, так это предоставить пользователям db_datareader и db_datawriter роли и предоставить выполнение всех применимых хранимых процедур и функций.