【发布时间】:2012-03-08 10:40:11
【问题描述】:
以下命令是否有效地授予用户“MyUser”执行数据库中所有存储过程的权限?
GRANT EXECUTE TO [MyDomain\MyUser]
【问题讨论】:
标签: sql sql-server tsql sql-server-2008 permissions
以下命令是否有效地授予用户“MyUser”执行数据库中所有存储过程的权限?
GRANT EXECUTE TO [MyDomain\MyUser]
【问题讨论】:
标签: sql sql-server tsql sql-server-2008 permissions
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 database execute permissions 的功能引入了数据库原则,正如您所描述的:
GRANT EXECUTE TO [MyDomain\MyUser]
这将授予数据库范围的权限,其中隐式包括所有模式中的所有存储过程。这意味着您不必为每个存储过程显式授予权限。
如果您想更细化,也可以通过granting schema execute permissions 进行限制:
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 的所有元素拥有执行权限)。
这样,您只需执行一次,并且可以轻松地向用户分配/撤销所有相关的应用程序权限,如果您以后需要更改它 - 如果您想创建更复杂的访问配置文件,这尤其有用。
注意:如果您将角色授予架构,这也会影响您稍后将创建的元素 - 这可能有益或无益,具体取决于您想要的设计,因此请记住这一点。
【讨论】: