Sql server 按SQL Server存储过程中的方式执行
我在SQL存储过程中使用Execute as user时遇到一些问题 我有两个用户,分别是user1和user2。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
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]表中选择数据的权限。希望这是清楚的。