Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 按SQL Server存储过程中的方式执行_Sql Server_Execute As - Fatal编程技术网

Sql server 按SQL Server存储过程中的方式执行

Sql server 按SQL Server存储过程中的方式执行,sql-server,execute-as,Sql Server,Execute As,我在SQL存储过程中使用Execute as user时遇到一些问题 我有两个用户,分别是user1和user2。 User1在TestDB User2在TestDB中具有执行权限 我创建了一个存储过程,如下所示: USE TestDB GO CREATE PROCEDURE dbo.usp_Demo WITH EXECUTE AS 'User1' AS SELECT * FROM [dbo].[accounts] 当我在User2的安全上下文下执行存储过程时,如下所示 us

我在SQL存储过程中使用Execute as user时遇到一些问题

我有两个用户,分别是user1和user2。
User1在
TestDB

User2在TestDB中具有执行权限 我创建了一个存储过程,如下所示:

USE TestDB

GO

CREATE PROCEDURE dbo.usp_Demo  
WITH EXECUTE AS 'User1'  
AS  
SELECT * FROM [dbo].[accounts] 
当我在User2的安全上下文下执行存储过程时,如下所示

use TestDB 

go 

exec dbo.usp_demo 

它返回了来自
[dbo].[accounts]
的所有记录。我假设User1应该选择[dbo].[accounts]上的权限来返回记录,但这里存储了返回结果的proc。另外,调用方用户2对表[dbo].[accounts]没有选择权限。如果此处有任何错误,请更正?

:“所有权链接规则将继续应用。这意味着,如果调用对象和被调用对象的所有者相同,则不会检查基础对象的权限。”“我假设User1应该选择[dbo].[accounts]上的权限以返回记录,但此处存储了返回结果的过程”这意味着什么?根据联机丛书,指定的上下文(此处为User1)应有足够的权限在定义的模块内运行语句。在本例中,User1应该具有从[dbo].[accounts]运行stmt SELECT*的SELECT权限,但User1只有对TestDB的公共访问权限,并且没有从[dbo].[accounts]表中选择数据的权限。希望这是清楚的:“所有权链接规则继续适用。这意味着,如果调用对象和被调用对象的所有者相同,则不会检查基础对象的权限。”“我假设User1应该对[dbo].[accounts]具有选择权以返回记录,但此处存储了返回结果的过程”这意味着什么?根据联机丛书,指定的上下文(此处为User1)应有足够的权限在定义的模块内运行语句。在本例中,User1应该具有从[dbo].[accounts]运行stmt SELECT*的SELECT权限,但User1只有对TestDB的公共访问权限,并且没有从[dbo].[accounts]表中选择数据的权限。希望这是清楚的。