Answers:
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]
user
可能必须放在方括号内。在我的用例中,这至少部分是正确的,因为我的用户附加了域(即,域中带有\字符)。编辑:修复了不转义的斜杠字符
如上所述,SQL Server 2005引入了向数据库原则授予数据库执行权限的功能:
GRANT EXECUTE TO [MyDomain\MyUser]
这将在数据库范围内授予权限,该权限将隐式包括所有架构中的所有存储过程。这意味着您不必显式地为每个存储过程授予权限。
如果您想更精细,也可以通过授予架构执行权限来进行限制:
GRANT EXECUTE ON SCHEMA ::dbo TO [MyDomain\MyUser]
除了上述答案,我还要添加:
您可能想要将此权限授予角色,然后将角色分配给用户。假设你已经创建了一个角色myAppRights
通过
CREATE ROLE [myAppRights]
那么您可以通过以下方式授予执行权限
GRANT EXECUTE TO [myAppRights]
扮演那个角色。
或者,如果要在架构级别执行此操作:
GRANT EXECUTE ON SCHEMA ::dbo TO [myAppRights]
也可以使用(在此示例中,该角色之后myAppRights
将对架构的所有元素具有执行权限dbo
)。
这样,您只需要做一次,就可以在以后需要更改权限的情况下轻松地向用户分配权限/从用户撤消所有相关的应用程序权限-如果要创建更复杂的访问配置文件,则尤其有用。
注意:如果您授予架构角色,这也会影响您以后将创建的元素-这可能是有益的,还是取决于您想要的设计,因此请记住这一点。
授予执行权[角色]
这个肯定有帮助