我從舊數據庫生成腳本,創建一個新的數據庫,並從舊數據庫導入所有數據。但是,迄今爲止,沒有用戶擁有存儲過程的執行權限。我知道我可以使用授予數據庫中所有存儲過程的用戶執行權限?
GRANT EXECUTE ON [storedProcName] TO [userName]
如果這只是一些程序,但是,我有大約100有啥我授予特定用戶對所有這些執行訪問的最簡單的方法?
在此先感謝。
我從舊數據庫生成腳本,創建一個新的數據庫,並從舊數據庫導入所有數據。但是,迄今爲止,沒有用戶擁有存儲過程的執行權限。我知道我可以使用授予數據庫中所有存儲過程的用戶執行權限?
GRANT EXECUTE ON [storedProcName] TO [userName]
如果這只是一些程序,但是,我有大約100有啥我授予特定用戶對所有這些執行訪問的最簡單的方法?
在此先感謝。
創建角色將此角色添加到用戶,然後您可以將執行權授予此角色的所有例程。
CREATE ROLE <abc>
GRANT EXECUTE TO <abc>
編輯
這個工作在SQL Server 2005中,我不知道這個功能的向後兼容性,我敢肯定什麼比2005年晚些時候應該罰款。
使用下面的代碼,更改正確的數據庫名稱和用戶名,然後獲取該輸出並在SSMS中執行。對於SQL 2005以上
USE <database_name>
select 'GRANT EXECUTE ON ['+name+'] TO [userName] '
from sys.objects
where type ='P'
and is_ms_shipped = 0
您還需要包含'PC'類型以包含CLR存儲過程。 – 2016-04-15 13:36:10
USE [DATABASE]
DECLARE @USERNAME VARCHAR(500)
DECLARE @STRSQL NVARCHAR(MAX)
SET @USERNAME='[USERNAME] '
SET @STRSQL=''
select @STRSQL+=CHAR(13)+'GRANT EXECUTE ON ['+ s.name+'].['+obj.name+'] TO'[email protected]+';'
from
sys.all_objects as obj
inner join
sys.schemas s ON obj.schema_id = s.schema_id
where obj.type in ('P','V','FK')
AND s.NAME NOT IN ('SYS','INFORMATION_SCHEMA')
EXEC SP_EXECUTESQL @STRSQL
這是一個解決方案,這意味着,當你添加新的存儲過程的模式,用戶可以無需調用授予對新的存儲過程執行執行它們:
IF EXISTS (SELECT * FROM sys.database_principals WHERE name = N'asp_net')
DROP USER asp_net
GO
IF EXISTS (SELECT * FROM sys.database_principals
WHERE name = N'db_execproc' AND type = 'R')
DROP ROLE [db_execproc]
GO
--Create a database role....
CREATE ROLE [db_execproc] AUTHORIZATION [dbo]
GO
--...with EXECUTE permission at the schema level...
GRANT EXECUTE ON SCHEMA::dbo TO db_execproc;
GO
--http://www.patrickkeisler.com/2012/10/grant-execute-permission-on-all-stored.html
--Any stored procedures that are created in the dbo schema can be
--executed by users who are members of the db_execproc database role
--...add a user e.g. for the NETWORK SERVICE login that asp.net uses
CREATE USER asp_net
FOR LOGIN [NT AUTHORITY\NETWORK SERVICE]
WITH DEFAULT_SCHEMA=[dbo]
GO
--...and add them to the roles you need
EXEC sp_addrolemember N'db_execproc', 'asp_net';
EXEC sp_addrolemember N'db_datareader', 'asp_net';
EXEC sp_addrolemember N'db_datawriter', 'asp_net';
GO
沒有過於複雜的問題,要授予EXECUTE選擇數據庫:
USE [DB]
GRANT EXEC TO [User_Name];
我剛剛在SQL Server 2008 Standard(亞馬遜RDS)上試過這個,它像一個魅力一樣工作。 – datagod 2013-03-05 06:04:03
你能舉個例子嗎?可以說我需要爲用戶授予對所有SP的EXECUTE權限SPExecuter – 2013-04-25 08:59:02
唯一需要的其他語句是將用戶添加到角色的行,如下所示:ALTER ROLE [abc] ADD MEMBER [user_name] – dhochee 2013-05-07 17:03:35