下面的命令是否有效地赋予用户“ MyUser”在数据库中执行 ALL 存储过程的权限?
GRANT EXECUTE TO [MyDomain\MyUser]
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 ON SCHEMA ::dbo TO [MyDomain\MyUser]
除了上面的答案之外,我想补充一点:
您可能希望将此权限授予 角色,然后将角色分配给用户。 假设您已经通过
CREATE ROLE [myAppRights]
然后你就可以通过
GRANT EXECUTE TO [myAppRights]
那个角色。
或者,如果你想做它 在模式层面:
GRANT EXECUTE ON SCHEMA ::dbo TO [myAppRights]
也可以工作(在这个示例中,角色 myAppRights将在以后对模式 dbo的所有元素拥有执行权限)。
myAppRights
dbo
通过这种方式,您只需要执行一次,并且如果以后需要更改,可以轻松地向用户分配/撤销所有相关的应用程序权限——如果您想创建更复杂的访问配置文件,这尤其有用。
注意: 如果您将一个角色授予一个模式,这也会影响您稍后将要创建的元素——这可能是有益的,也可能不是,取决于您想要的设计,所以请记住这一点。