授予数据库中所有存储过程的用户执行权限?

问题描述:

我从旧数据库生成脚本,创建一个新的数据库,并从旧数据库导入所有数据。但是,迄今为止,没有用户拥有存储过程的执行权限。我知道我可以使用授予数据库中所有存储过程的用户执行权限?

GRANT EXECUTE ON [storedProcName] TO [userName] 

如果这只是一些程序,但是,我有大约100有啥我授予特定用户对所有这些执行访问的最简单的方法?

在此先感谢。

创建角色将此角色添加到用户,然后您可以将执行权授予此角色的所有例程。

CREATE ROLE <abc> 
GRANT EXECUTE TO <abc> 

编辑
这个工作在SQL Server 2005中,我不知道这个功能的向后兼容性,我敢肯定什么比2005年晚些时候应该罚款。

+0

我刚刚在SQL Server 2008 Standard(亚马逊RDS)上试过这个,它像一个魅力一样工作。 – datagod 2013-03-05 06:04:03

+0

你能举个例子吗?可以说我需要为用户授予对所有SP的EXECUTE权限SPExecuter – 2013-04-25 08:59:02

+4

唯一需要的其他语句是将用户添加到角色的行,如下所示:ALTER ROLE [abc] ADD MEMBER [user_name] – dhochee 2013-05-07 17:03:35

使用下面的代码,更改正确的数据库名称和用户名,然后获取该输出并在SSMS中执行。对于SQL 2005以上

USE <database_name> 
select 'GRANT EXECUTE ON ['+name+'] TO [userName] ' 
from sys.objects 
where type ='P' 
and is_ms_shipped = 0 
+1

您还需要包含'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 

参考:Grant Execute Permission on All Stored Procedures

没有过于复杂的问题,要授予EXECUTE选择数据库:

USE [DB] 
GRANT EXEC TO [User_Name];