SETUSER (Transact-SQL)

适用于:SQL ServerAzure SQL 托管实例

可使 sysadmin 固定服务器角色的成员或 db_owner 固定数据库角色的成员模拟另一用户

重要

包含 SETUSER 只是为了保持向后兼容性。 在以后的 SQL Server 版本中可能不再支持 SETUSER。 建议改用 EXECUTE AS

Transact-SQL 语法约定

语法

  
SETUSER [ 'username' [ WITH NORESET ] ]   

注意

若要查看 SQL Server 2014 (12.x) 及更早版本的 Transact-SQL 语法,请参阅早期版本文档

自变量

' username '
当前数据库中被模拟的 SQL Server 用户名或 Windows 用户名。 如果未指定 username,将重置模拟用户的系统管理员或数据库所有者的原始标识。

WITH NORESET
指定后续 SETUSER 语句(没有指定的 username)不应将用户标识重置为系统管理员或数据库所有者。

备注

为测试其他用户的权限,sysadmin 固定服务器角色的成员或数据库所有者可以使用 SETUSER 来使用另外一个用户的标识。 具有 db_owner 固定数据库角色中的成员身份还不够。

仅对 SQL Server 用户使用 SETUSER。 不支持 Windows 用户使用 SETUSER。 如果使用 SETUSER 来模拟其他用户的标识,则进行模拟的用户创建的任何对象均由被模拟的用户所有。 例如,如果数据库所有者模拟了用户 Margaret 的标识并创建了一个名为 orders 的表,则 orders 表将归 Margaret 所有,而不归系统管理员所有。

SETUSER 一直保持有效,直到发出其他 SETUSER 语句或用 USE 语句更改当前数据库为止。

备注

如果使用了 SETUSER WITH NORESET,数据库所有者或系统管理员必须注销然后重新登录,才能重新建立自己的权限。

权限

要求具有 sysadmin 固定服务器角色的成员身份或数据库所有者身份。 具有 db_owner 固定数据库角色中的成员身份还不够

示例

以下示例显示了数据库所有者如何采用其他用户的标识。 用户 mary 已创建了一个名为 computer_types 的表。 通过使用 SETUSER,数据库所有者可以模拟 mary 授予用户 joe 访问 computer_types 表的权限,然后重置自己的标识。

SETUSER 'mary';  
GO  
GRANT SELECT ON computer_types TO joe;  
GO  
--To revert to the original user  
SETUSER;  

另请参阅

DENY (Transact-SQL)
GRANT (Transact-SQL)
REVOKE (Transact-SQL)
USE (Transact-SQL)