Почему нет встроенной роли базы данных «исполнитель хранимых процедур»? - PullRequest
2 голосов
/ 21 ноября 2010

Мне всегда было интересно, почему в списке ролей базы данных (db_datareader, db_datawriter, db_ddladmin и т. Д.) Никогда не было db_storedprocedureexecutor. Другие имеют смысл, но кажется, что возможность предоставить возможность выполнения всех сохраненных процедур конкретному пользователю (без предоставления им db_owner, что является единственным другим способом выполнить то же самое) была бы удобной вещью.

Например, скажем, я хочу дать всем моим разработчикам права на запуск хранимых процедур, не позволяя им выполнять какие-либо DDL - без явного предоставления EXECUTE для каждой хранимой процедуры (а затем не забывая добавлять новые при добавлении дополнительных SP). развернуты), сделать это невозможно (я знаю, что SP могут содержать DDL, поэтому им все равно может быть косвенно разрешен доступ к DDL таким образом).

Если у меня есть учетная запись службы приложений и несколько хранимых процедур, которые идут вместе с моим приложением, я должен явно предоставить права каждому SP (поскольку я не хочу предоставлять свою DBO учетной записи службы приложения), тогда как я может использовать роль, чтобы позволить им обновлять / удалять все, что они хотят.

Хотя изначально это казалось очевидным, сейчас я не уверен, почему эта роль отсутствует на сервере базы данных - кто-нибудь может предложить объяснение, почему это ужасная идея (как я полагаю, она есть, или она уже существует)

EDIT:

Кажется, я не единственный с таким ожиданием - и он работает с горсткой T-SQL (кажется, вы можете предоставить полное право EXECUTE, о котором я вас не знал может сделать), что просто заставляет меня задуматься, почему это не стандартно!

Ответы [ 2 ]

3 голосов
/ 21 ноября 2010

Если вы используете схемы, вам нужно только GRANT EXECUTE ON SCHEMA::storedprocschema

например CREATE PROC storedprocschema.DoStuff ...

Почему, не знаю ...

0 голосов
/ 21 ноября 2010

Поскольку, если вы можете выполнить все хранимые процедуры, вы можете выполнить sp_addrolemember и сделать все, что может database_owner.

...