上下文切换—EXECUTE AS 与 SETUSER的使用

本文对比了EXECUTEAS和SETUSER两种上下文切换功能的优缺点,并详细阐述了它们在权限管理、作用范围及恢复上下文方面的差异。通过具体实例展示了如何使用这两种语句。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

都有切换上下文的功能

[color=blue]一、比较上下文切换功能:[/color]
与 SETUSER 语句相比,EXECUTE AS 具有以下优点:
1、除 sa 和 dbo 之外的服务器主体或数据库主体可以调用 EXECUTE AS。
1)、调用 EXECUTE AS 语句的用户必须具有目标主体的 IMPERSONATE 权限。
2)、SETUSER 只限制于 sysadmin 固定服务器角色的成员或 db_owner 固定数据库角色的成员。

2、在语句中显式定义模拟的作用域。
1)、将指定的主体指定为 LOGIN(服务器级模拟),或者指定为 USER(数据库级模拟)。
2)、SETUSER 语句中的模拟作用域是隐式的。如果 sysadmin 的成员调用该语句,将使用服务器级模拟。如果为 dbo 的帐户调用该语句,将使用数据库级模拟。

3、模拟将保持有效,直到出现下列情况之一为止:
1)、删除会话。
2)、上下文被切换到另一登录名或用户。
3)、上下文被恢复到以前的执行上下文。
对于 SETUSER,模拟将保持有效,直到出现下列情况之一为止
1)、发出另一个 SETUSER 语句。
2)、当前数据库由为 dbo 的帐户或为 sysadmin 固定服务器角色成员的帐户使用 USE 语句更改。

[color=blue]二、恢复到以前的上下文[/color]
[color=green]1、EXECUTE AS[/color]
使用 REVERT 语句可以返回到以前的上下文。REVERT 语句的调用方必须位于发生模拟的数据库中。
[color=green]2、SETUSER[/color]
若要返回到以前的上下文,请使用 SETUSER 语句且不指定用户名。

[color=blue]三、实例[/color]
[color=green]1、EXECUTE AS[/color]
USE Sales;
GO
CREATE PROCEDURE dbo.usp_Demo
WITH EXECUTE AS 'CompanyDomain\SqlUser1'
AS
SELECT user_name();
GO

[color=green]2、SETUSER[/color]
SETUSER 'mary'
GO
GRANT SELECT ON computer_types TO joe
GO
SETUSER
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值