以下命令是否有效地为用户“MyUser”授予了在数据库中执行所有存储过程的权限?
GRANT EXECUTE TO [MyDomain\MyUser]
答案 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)
授予公众执行
这一定肯定有帮助