Cha*_*adD 136 sql t-sql sql-server permissions sql-server-2008
以下命令是否有效地为用户"MyUser"授予了在数据库中执行所有存储过程的权限?
GRANT EXECUTE TO [MyDomain\MyUser]
Run Code Online (Sandbox Code Playgroud)
Ant*_*ott 220
SQL Server 2008及更高版本:
/* CREATE A NEW ROLE */
CREATE ROLE db_executor
/* GRANT EXECUTE TO THE ROLE */
GRANT EXECUTE TO db_executor
Run Code Online (Sandbox Code Playgroud)
仅适用于用户(不是角色):
USE [DBName]
GO
GRANT EXECUTE TO [user]
Run Code Online (Sandbox Code Playgroud)
Rob*_*nto 68
SQL Server 2005引入了向数据库原则授予数据库执行权限的功能,如您所述:
GRANT EXECUTE TO [MyDomain\MyUser]
Run Code Online (Sandbox Code Playgroud)
这将在数据库范围内授予权限,该范围隐式包含所有模式中的所有存储过程.这意味着您不必为每个存储过程显式授予权限.
如果您想要更精细,还可以通过授予架构执行权限来进行限制:
GRANT EXECUTE ON SCHEMA ::dbo TO [MyDomain\MyUser]
Run Code Online (Sandbox Code Playgroud)
Mat*_*att 15
除了上面的答案,我还想补充一下:
您可能希望将此权限授予角色,然后将角色分配给用户.假设你已经创建了一个角色myAppRights通过
CREATE ROLE [myAppRights]
Run Code Online (Sandbox Code Playgroud)
然后你可以通过提供执行权限
GRANT EXECUTE TO [myAppRights]
Run Code Online (Sandbox Code Playgroud)
那个角色.
或者,如果您想在架构级别执行此操作:
GRANT EXECUTE ON SCHEMA ::dbo TO [myAppRights]
Run Code Online (Sandbox Code Playgroud)
也适用(在此示例中,角色之后myAppRights将对所有模式元素具有执行权限dbo).
这样,您只需要执行一次,并且可以在以后需要更改时轻松地向/从用户分配/撤消所有相关的应用程序权限 - 如果您想要创建更复杂的访问配置文件,这将非常有用.
注意:如果您为模式授予角色,这也会影响您稍后创建的元素 - 这可能是有益的,也可能不是取决于您的预期设计,因此请记住这一点.