GRANT EXECUTE到所有存储过程

时间:2012-02-17 00:38:26

标签: sql sql-server tsql sql-server-2008 permissions

以下命令是否有效地为用户“MyUser”授予了在数据库中执行所有存储过程的权限?

GRANT EXECUTE TO [MyDomain\MyUser]

4 个答案:

答案 0 :(得分:200)

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]

答案 1 :(得分:65)

SQL Server 2005引入了grant database execute permissions数据库原则的功能,正如您所描述的那样:

GRANT EXECUTE TO [MyDomain\MyUser]

这将在数据库范围内授予权限,该范围隐式包含所有模式中的所有存储过程。这意味着您不必为每个存储过程显式授予权限。

如果您想要更细化,也可以按granting schema execute permissions限制:

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

答案 2 :(得分:11)

除上述答案外,我还想补充一下:


您可能希望将此权限授予角色,然后将该角色分配给用户。 假设您已通过

创建了角色myAppRights
CREATE ROLE [myAppRights] 

然后你可以通过

给予执行权
GRANT EXECUTE TO [myAppRights] 

到那个角色。


或者,如果您想在架构级别上执行

GRANT EXECUTE ON SCHEMA ::dbo TO [myAppRights]

也有效(在此示例中,角色myAppRights之后将对模式dbo的所有元素具有执行权限。)

这样,您只需执行一次,如果您需要稍后更改,则可以轻松地向/从用户分配/撤消所有相关的应用程序权限 - 如果您想要创建更复杂的访问配置文件,这将非常有用。 / p>

注意:如果您为某个架构授予了一个角色,这也会影响您之后创建的元素 - 这可能会有所不同,具体取决于您的设计,所以请记住这一点。

答案 3 :(得分:-5)

授予公众执行

这一定肯定有帮助