2013-09-24 54 views

回答

14

嘗試類似的東西。它創建一個新角色並授予對模式的執行權限。

CREATE ROLE db_executor 
GRANT EXECUTE ON SCHEMA::schema_name TO db_executor 
exec sp_addrolemember 'db_executor', 'Username' 

替換schema_name與您的架構和'Username'與您的用戶。

+0

是否有可能GRANT SCHEMA權限已經存在SQL Server角色,如擁有db_datareader? –

+0

@FatihYarbaşı它應該是可能的,但我不確定內置角色。我建議不要擴展內置角色,最好是創建自己的自定義角色。 – Szymon

1

爲了授予一個模式中所有存儲過程的執行權限,通過 查詢@szymon就足夠了。

下面的查詢將爲所選用戶授予過程的執行權限。 只要用戶已經存在。

GRANT EXECUTE ON OBJECT :: [模式] [過程名] [使用] AS [模式]。 GO

1

我建議你做什麼Szymon建議,因爲它更優雅的解決方案,但要避免您可以執行這樣的查詢創建角色,複製結果到單獨的查詢編輯器,並同時執行所有。

這將產生GRANT執行語句在特定的模式,你擁有所有的存儲過程

DECLARE @SchemaName varchar(20) 
DECLARE @UserName varchar(20) 

SET @SchemaName = 'dbo' 
SET @UserName = 'user_name' 

select 'GRANT EXECUTE ON OBJECT::' + @SchemaName + '.' + P.name + ' to ' + @UserName 
from sys.procedures P 
inner join sys.schemas S on P.schema_id = S.schema_id 
where S.name = @SchemaName 
+0

但是如果創建新的存儲過程會怎樣?我認爲你需要爲新創建的存儲過程授予exec權限? –

相關問題