GRANT EXECUTE到所有存储过程

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)

  • +1 plus:它甚至授予对未来存储过程的EXECUTE权限,例如那些尚未在您的数据库中的存储过程 - 但稍后将创建. (25认同)
  • 以及将用户添加到角色的下一个级别,以防它为某人节省另一个研究步骤。ALTER ROLE db_executor ADD MEMBER YourUserNameHere (3认同)
  • 我认为值得注意的是,你的`用户'可能必须在方括号内.在我的用例中这是真的,至少部分是因为我的用户有一个域附加(即它有一个\字符).编辑:修复未转义的斜杠字符 (2认同)
  • @MichaelTobisch db_ddladmin 不授予执行存储过程的访问权限;它允许创建/更改/删除存储过程。 (2认同)

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)

  • 很高兴能够对特定模式执行此操作,因此避免了对sys的权限 (5认同)

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).

这样,您只需要执行一次,并且可以在以后需要更改时轻松地向/从用户分配/撤消所有相关的应用程序权限 - 如果您想要创建更复杂的访问配置文件,这将非常有用.

注意:如果您为模式授予角色,这也会影响您稍后创建的元素 - 这可能是有益的,也可能不是取决于您的预期设计,因此请记住这一点.