对所有存储过程授予执行权限

下面的命令是否有效地赋予用户“ MyUser”在数据库中执行 ALL 存储过程的权限?

GRANT EXECUTE TO [MyDomain\MyUser]
333244 次浏览

SQLServer2008及以上版本:

/* 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]

SQLServer2005将 授予数据库执行权限的能力引入到数据库原则中,正如您所描述的:

GRANT EXECUTE TO [MyDomain\MyUser]

它将授予数据库作用域的权限,该作用域隐式包含所有架构中的所有存储过程。这意味着不必为每个存储过程显式授予权限。

如果你想要更细粒度,你也可以用 授予架构执行权限来限制:

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

除了上面的答案之外,我想补充一点:


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

CREATE ROLE [myAppRights]

然后你就可以通过

GRANT EXECUTE TO [myAppRights]

那个角色。


或者,如果你想做它 在模式层面:

GRANT EXECUTE ON SCHEMA ::dbo TO [myAppRights]

也可以工作(在这个示例中,角色 myAppRights将在以后对模式 dbo的所有元素拥有执行权限)。

通过这种方式,您只需要执行一次,并且如果以后需要更改,可以轻松地向用户分配/撤销所有相关的应用程序权限——如果您想创建更复杂的访问配置文件,这尤其有用。

注意: 如果您将一个角色授予一个模式,这也会影响您稍后将要创建的元素——这可能是有益的,也可能不是,取决于您想要的设计,所以请记住这一点。