`

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

Go 
阅读更多
都有切换上下文的功能

一、比较上下文切换功能:
与 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 语句更改。

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

三、实例
1、EXECUTE AS
USE Sales;
GO
CREATE PROCEDURE dbo.usp_Demo
WITH EXECUTE AS 'CompanyDomain\SqlUser1'
AS
SELECT user_name();
GO

2、SETUSER
SETUSER 'mary'
GO
GRANT SELECT ON computer_types TO joe
GO
SETUSER
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics