Sql server 2008 如何向所有过程授予SELECT权限

Sql server 2008 如何向所有过程授予SELECT权限,sql-server-2008,tsql,Sql Server 2008,Tsql,为了确保数据库交互的安全,我创建了一个只能执行存储过程的受限用户。他没有查询任何表的任何权限 我已经很好地实现了这个场景!。现在的问题是,我的一个存储过程涉及动态SQL执行,它说我没有在表X上运行SELECT查询的权限,从而导致执行失败 为了避免这种情况,我需要为这些过程而不是用户提供显式的SELECT权限 请帮帮我 定义要作为具有适当权限的用户执行的存储过程: 定义要作为具有适当权限的用户执行的存储过程: 没有内置函数向用户提供execute 创建具有执行权限的角色,并将该角色添加到用户 CR

为了确保数据库交互的安全,我创建了一个只能执行存储过程的受限用户。他没有查询任何表的任何权限

我已经很好地实现了这个场景!。现在的问题是,我的一个存储过程涉及动态SQL执行,它说我没有在表X上运行SELECT查询的权限,从而导致执行失败

为了避免这种情况,我需要为这些过程而不是用户提供显式的SELECT权限


请帮帮我

定义要作为具有适当权限的用户执行的存储过程:


定义要作为具有适当权限的用户执行的存储过程:


没有内置函数向用户提供execute

创建具有执行权限的角色,并将该角色添加到用户

CREATE ROLE db_executer
GRANT EXECUTE to db_executer
EXEC sp_addrolemember N'db_executer', N'<username>'
创建角色数据库执行器
将EXECUTE授予db_executer
EXEC sp_addrolemember N'db_executer',N''

没有内置函数向用户提供execute

创建具有执行权限的角色,并将该角色添加到用户

CREATE ROLE db_executer
GRANT EXECUTE to db_executer
EXEC sp_addrolemember N'db_executer', N'<username>'
创建角色数据库执行器
将EXECUTE授予db_executer
EXEC sp_addrolemember N'db_executer',N''
这就是你想要的吗

USE DatabaseName
GO
-- 1 - db_executestoredprocedures
-- 1a - Create role
CREATE ROLE db_executestoredprocedures
GO
-- 1b - Grant permissions
GRANT EXECUTE TO db_executestoredprocedures
GO

-- 2 - db_selecttablevaluedfunctions
-- 2a - Create role
CREATE ROLE db_selecttablevaluedfunctions
GO
-- 2 - Create permissions
DECLARE @Function_Name nvarchar(250);
DECLARE @CMDEXEC1 nvarchar(2000);
DECLARE db_cursor CURSOR FOR  
SELECT [name]
FROM sys.objects
WHERE Type = 'TF'
OPEN db_cursor   
FETCH NEXT FROM db_cursor INTO @Function_Name
WHILE @@FETCH_STATUS = 0   
BEGIN

 SET @CMDEXEC1 = 'GRANT SELECT ON [' + @Function_Name + '] TO db_selecttablevaluedfunctions;'
 --- SELECT @CMDEXEC1 
 EXEC(@CMDEXEC1)
 FETCH NEXT FROM db_cursor INTO @Function_Name
END
CLOSE db_cursor   
DEALLOCATE db_cursor
GO
这是你想要的吗

USE DatabaseName
GO
-- 1 - db_executestoredprocedures
-- 1a - Create role
CREATE ROLE db_executestoredprocedures
GO
-- 1b - Grant permissions
GRANT EXECUTE TO db_executestoredprocedures
GO

-- 2 - db_selecttablevaluedfunctions
-- 2a - Create role
CREATE ROLE db_selecttablevaluedfunctions
GO
-- 2 - Create permissions
DECLARE @Function_Name nvarchar(250);
DECLARE @CMDEXEC1 nvarchar(2000);
DECLARE db_cursor CURSOR FOR  
SELECT [name]
FROM sys.objects
WHERE Type = 'TF'
OPEN db_cursor   
FETCH NEXT FROM db_cursor INTO @Function_Name
WHILE @@FETCH_STATUS = 0   
BEGIN

 SET @CMDEXEC1 = 'GRANT SELECT ON [' + @Function_Name + '] TO db_selecttablevaluedfunctions;'
 --- SELECT @CMDEXEC1 
 EXEC(@CMDEXEC1)
 FETCH NEXT FROM db_cursor INTO @Function_Name
END
CLOSE db_cursor   
DEALLOCATE db_cursor
GO

MNagel对此有正确的链接,但重申一下,您希望使用以下内容:

CREATE PROC dbo.MyProc
WITH EXECUTE AS 'SomeUser'
AS
BEGIN --Proc
 --Do Stuff
END --Proc
GO
GRANT SELECT, EXEC ON Schema::dbo TO MyRole;
“执行为”还有其他一些问题。您必须允许其他人模拟指定的用户,并且该用户需要对基础表具有适当的选择权限

如果要批量授予权限,可以在架构级别而不是对象级别执行此操作,如:

CREATE PROC dbo.MyProc
WITH EXECUTE AS 'SomeUser'
AS
BEGIN --Proc
 --Do Stuff
END --Proc
GO
GRANT SELECT, EXEC ON Schema::dbo TO MyRole;

我以前用它来大大简化我们角色的许多授权声明。对于更一般的角色,我们很少有覆盖,因此这会有很大帮助。

MNagel对此有正确的链接,但重申一下,您希望使用以下方法:

CREATE PROC dbo.MyProc
WITH EXECUTE AS 'SomeUser'
AS
BEGIN --Proc
 --Do Stuff
END --Proc
GO
GRANT SELECT, EXEC ON Schema::dbo TO MyRole;
“执行为”还有其他一些问题。您必须允许其他人模拟指定的用户,并且该用户需要对基础表具有适当的选择权限

如果要批量授予权限,可以在架构级别而不是对象级别执行此操作,如:

CREATE PROC dbo.MyProc
WITH EXECUTE AS 'SomeUser'
AS
BEGIN --Proc
 --Do Stuff
END --Proc
GO
GRANT SELECT, EXEC ON Schema::dbo TO MyRole;

我以前用它来大大简化我们角色的许多授权声明。对于更一般的角色,我们几乎没有覆盖,因此这有很大帮助。

在sql抱怨您没有权限对表X运行SELECT查询的SP上,您在该特定SP和表上的所有权链是否已断开?

在sql抱怨您没有权限在表X上运行SELECT查询的SP上,您在该特定SP和表上的所有权链是否已断开?

您正在使用哪些DBMS?神谕Postgres?您使用的是哪种数据库管理系统?神谕Postgres?你的答案只是一个网站链接,这不是答案,而是评论。根据我的经验,人们如此渴望一个答案,而不是对答案的怀疑。请修改,我将删除-1。您的答案只是指向网站的链接,这不是答案,而是评论。根据我的经验,人们如此渴望一个答案,而不是对答案的怀疑。请修改,我将删除-1。与其设置每个角色,不如设置一个角色。例如,一旦新员工加入公司,您就必须再次运行此功能,因为您不必担任该角色。最后,当我看到你的光标时,我嘴里有点呕吐然而,你的答案是问题的功能性解决方案。与其设定每个角色,不如设定一个角色。例如,一旦新员工加入公司,您就必须再次运行此功能,因为您不必担任该角色。最后,当我看到你的光标时,我嘴里有点呕吐但是,您的答案是问题的功能解决方案。我不想授予用户权限。相反,我想向存储过程授予权限。我不想向用户授予权限。相反,我想授予存储过程权限。