GRANT EXECUTE для всех хранимых процедур

Предоставляет ли следующая команда пользователю "MyUser" разрешение на выполнение ВСЕХ хранимых процедур в базе данных?

GRANT EXECUTE TO [MyDomain\MyUser]

Ответ 1

SQL Server 2008 и выше:

/* CREATE A NEW ROLE */
CREATE ROLE db_executor

/* GRANT EXECUTE TO THE ROLE */
GRANT EXECUTE TO db_executor

Только для пользователя (не для роли):

USE [DBName]
GO
GRANT EXECUTE TO [user]

Ответ 2

В SQL Server 2005 появилась возможность предоставить разрешения на выполнение базы данных в принципе базы данных, как вы описали:

GRANT EXECUTE TO [MyDomain\MyUser]

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

Вы также можете ограничить предоставление разрешений на выполнение схемы, если вы хотите быть более подробными:

GRANT EXECUTE ON SCHEMA ::dbo TO [MyDomain\MyUser]

Ответ 3

В дополнение к приведенным выше ответам я хотел бы добавить:

Вместо этого вы можете присвоить это роли , а затем назначьте роль пользователю (пользователям).

CREATE ROLE [myAppRights] 
GRANT EXECUTE TO [myAppRights] 

делает это.

Если вы хотите сделать это на уровне схемы:

GRANT EXECUTE ON SCHEMA ::dbo TO [myAppRights]

также работает (в этом примере роль myAppRights будет иметь права выполнения для всех элементов схемы dbo).

Таким образом, вы должны сделать это только один раз и можете легко назначать/отзывать все связанные права приложения для пользователя/пользователя, если вам нужно изменить это позже - особенно полезно, если вы хотите создать более сложные профили доступа.