都有切换上下文的功能
[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
[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