SETUSER (Transact-SQL)

适用于:SQL ServerAzure SQL 托管实例

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

重要

SETUSER 仅包含此功能以实现向后兼容。 SETUSER未来 SQL Server 版本可能不支持。 建议改用 EXECUTE AS

Transact-SQL 语法约定

语法

  
SETUSER [ 'username' [ WITH NORESET ] ]   

参数

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

与NORESET合作
规定后续 SETUSER 语句(无用户 )不应将用户身份重置为系统管理员或数据库所有者。

备注

SETUSER 系统 管理员 固定服务器角色的成员或数据库所有者可以使用它,以采用另一用户的身份来测试另一用户的权限。 具有 db_owner 固定数据库角色中的成员身份还不够。

只在SQL Server用户中使用SETUSER。 SETUSER不支持Windows用户。 当 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)
使用(Transact-SQL)