2012-02-17 35 views

回答

156

的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] 
+16

+1 plus:它甚至授予未來存儲過程的EXECUTE權限,例如,那些還沒有在你的數據庫中 - 但將在稍後創建。 – 2012-02-17 05:57:52

+1

我認爲值得注意的是你的用戶可能必須在方括號內。這在我的用例中至少部分是因爲我的用戶有一個域名(即它有一個\字符)。 編輯:固定非轉義斜線字符 – PrinceTyke 2015-07-22 11:56:19

+1

爲什麼不將用戶分配給db_ddladmin角色? 「db_ddladmin固定數據庫角色的成員可以在數據庫中運行任何數據定義語言(DDL)命令。」 - 見[這裏](https://docs.microsoft.com/en-us/sql/relational-databases/security/authentication-access/database-level-roles) – 2018-02-08 10:41:07

60

SQL Server 2005中引入的能力grant database execute permissions到數據庫原理,正如你所描述的那樣:

GRANT EXECUTE TO [MyDomain\MyUser] 

這將授予數據庫作用域的權限,這隱含地包含所有模式中的所有存儲過程。這意味着您不必爲每個存儲過程明確授予權限。

您還可以通過granting schema execute permissions,如果你想更細緻的限制:

GRANT EXECUTE ON SCHEMA ::dbo TO [MyDomain\MyUser] 
+4

偉大的能夠做到這一點的具體模式,所以避免sys上的權限 – RemarkLima 2014-03-13 15:30:46

8

除了上述問題的答案,我想補充:

你可能要授予這取而代之的是角色,然後將角色分配給用戶。

CREATE ROLE [myAppRights] 
GRANT EXECUTE TO [myAppRights] 

這樣做。

如果你想這樣做在架構級別:

GRANT EXECUTE ON SCHEMA ::dbo TO [myAppRights] 

也可以(在這個例子中,角色myAppRights將執行對模式dbo的所有元素權利之後)。

這樣,您只需執行一次操作,如果您稍後需要更改,就可以方便地向用戶分配/撤銷所有相關的應用程序權限 - 如果您想創建更復雜的訪問配置文件,此功能尤其有用。