Почему роль базы данных не будет встроенной «сохраненной процедуры исполнителя»?
-
27-09-2019 - |
Вопрос
Я всегда задавался вопросом, почему список ролей базы данных (db_datareader
, db_datawriter
, db_ddladmin
, и т. Д.) Никогда не включал db_storedprocedureexecutor
. Отказ Другие имеют смысл, но кажется, что способность предоставлять возможность выполнять все хранимые ProCES для конкретного пользователя (без предоставления их db_owner
, который является единственным другим способом достичь то же самое) было бы удобным.
Например, скажем, я хочу дать всем своим разработчикам права запускать сохраненные процедуры, не позволяя им выполнить любой DDL - без явного предоставления выполнения в каждой сохраненной процедуре (а затем вспоминать, чтобы добавить новые, когда дополнительные SPS развернуты) , нет никакого способа сделать это (я знаю, что SPS может содержать DDL, чтобы они все еще могли быть косвенно доступен доступом к DDL таким образом).
Если у меня есть учетная запись службы приложений, и ряд хранимых процедур, которые идут вместе с моим приложением, я должен четко предоставить права на каждый SP (так как я не хочу предоставлять мою учетную запись службы приложений DBO), тогда как я могу использовать Роль позволит им обновлять / удалять все, что они хотят.
Хотя это изначально казалось очевидным, я сейчас не уверен, почему эта роль отсутствует на сервере базы данных - можно ли кто-нибудь предложить объяснение того, почему это ужасная идея (как я предполагаю, или это уже существует)?
РЕДАКТИРОВАТЬ:
Кажется, я не единственный с этим ожиданием - и Он работал с горсткой T-SQL (Похоже, вы можете предоставить одеяло, выполненное право, которое я не знал, что вы могли сделать), который просто оставляет мне интересно, почему это не стандартное!
Решение
Если вы используете схемы, то вам нужно только GRANT EXECUTE ON SCHEMA::storedprocschema
например CREATE PROC storedprocschema.DoStuff ...
Что касается почему нет идеи ...
Другие советы
Потому что, если вы можете выполнить все сохраненные процедуры, вы можете выполнить sp_addrolemember
, и вы можете сделать все, что database_owner
могу.