2012-02-17 2 views

ответ

156

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] 
+16

+1 plus: он даже предоставляет разрешения EXECUTE для будущих хранимых процедур, например. те, которых еще нет в вашей базе данных, но будут созданы позже. –

+1

Я думаю, что стоит отметить, что ваш «пользователь» может оказаться в квадратных скобках. Это было верно в моем случае использования, по крайней мере частично, потому что у моего пользователя был присоединенный домен (т. Е. В нем был символ \). Редактировать: fixed unescaped slash character – PrinceTyke

+1

Почему бы не назначить пользователя роли db_ddladmin? «Члены фиксированной роли базы данных db_ddladmin могут запускать любую команду Data Definition Language (DDL) в базе данных». - см. [здесь] (https://docs.microsoft.com/en-us/sql/relational-databases/security/authentication-access/database-level-roles) –

60

SQL Server 2005 появилась возможность grant database execute permissions принципу базы данных, как вы описали:

GRANT EXECUTE TO [MyDomain\MyUser] 

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

Вы также можете ограничить с помощью granting schema execute permissions, если вы хотите быть более зернистая:

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

Отлично, чтобы иметь возможность сделать это по определенной схеме , поэтому избегая разрешений на sys – RemarkLima

8

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

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

CREATE ROLE [myAppRights] 
GRANT EXECUTE TO [myAppRights] 

делает это.

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

GRANT EXECUTE ON SCHEMA ::dbo TO [myAppRights] 

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

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

Смежные вопросы