EXECUTE AS 与 SETUSER
在 SQL Server 2005 中,可以使用 EXECUTE AS 语句来显式设置在其中执行字符串、命令或模块的上下文。EXECUTE AS 将替换 SETUSER 语句。有关上下文切换的详细信息,请参阅了解上下文切换。
比较上下文切换功能
与 SETUSER 语句相比,EXECUTE AS 具有以下优点:
- 除 sa 和 dbo 之外的服务器主体或数据库主体可以调用 EXECUTE AS。
调用 EXECUTE AS 语句的用户必须具有目标主体的 IMPERSONATE 权限。
SETUSER 只限制于 sysadmin 固定服务器角色的成员或 db_owner 固定数据库角色的成员。 - 在语句中显式定义模拟的作用域。
将指定的主体指定为 LOGIN(服务器级模拟),或者指定为 USER(数据库级模拟)。
SETUSER 语句中的模拟作用域是隐式的。如果 sysadmin 的成员调用该语句,将使用服务器级模拟。如果为 dbo 的帐户调用该语句,将使用数据库级模拟。 - 直到发生下列事件之一时,模拟才会失效:
- 删除会话。
- 上下文被切换到另一登录名或用户。
- 上下文被恢复到以前的执行上下文。
对于 SETUSER,模拟将保持有效,直到出现下列情况之一为止: - 发出另一个 SETUSER 语句。
- 当前数据库由为 dbo 的帐户或为 sysadmin 固定服务器角色成员的帐户使用 USE 语句更改。
- 可以通过对多个主体多次调用 EXECUTE AS 语句来创建执行上下文堆栈。在调用时,REVERT 语句将把上下文切换为上下文堆栈中上一级的登录帐户或用户。有关详细信息,请参阅 EXECUTE AS (Transact-SQL)。
SETUSER 不允许创建执行上下文堆栈。
恢复到以前的上下文
EXECUTE AS
使用 REVERT 语句可以返回到以前的上下文。REVERT 语句的调用方必须位于发生模拟的同一数据库中。
SETUSER
若要返回到以前的上下文,请使用 SETUSER 语句且不指定用户名。
请参阅
概念
其他资源
上下文切换
EXECUTE AS (Transact-SQL)
REVERT (Transact-SQL)
SETUSER (Transact-SQL)
sys.database_principals (Transact-SQL)
sys.server_principals (Transact-SQL)