Transact-SQL 参考

SETUSER

允许 sysadmin 固定服务器角色成员或 db_owner 固定数据库角色成员模拟其他用户。

重要  在 Microsoft® SQL Server™ 2000 中包含 SETUSER 仅为保持向后兼容性,不推荐使用该语句。在以后的 SQL Server 版本中可能不再支持 SETUSER。

语法

SETUSER [ 'username' [ WITH NORESET ] ]

参数

'username'

是所模拟的当前数据库中的 SQL Server 或 Microsoft Windows NT® 用户名。如果未指定 username,将重新建立模拟用户的系统管理员或数据库所有者的原始标识。

WITH NORESET

指定后续 SETUSER 语句(未指定 username)不重置为系统管理员或数据库所有者。

注释

为测试其他用户的权限,sysadmindb_owner 角色成员可以通过 SETUSER 采用另一个用户的标识。

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

创建由其他用户所有的对象不需要 SETUSER,因为创建对象时可以使用合法名称将其他用户指定为新对象的所有者。例如,如果用户 Andrewdb_owner 数据库角色成员)创建表 Margaret.customers,则 customers 由用户 Margaret 而非用户 Andrew 所有。

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

权限

SETUSER 权限默认授予 sysadmin 固定服务器角色成员且不可转让。

示例
A. 使用 SETUSER

下例显示数据库所有者如何采用其他用户的标识。用户 mary 创建了一个名为 computer_types 的表。数据库所有者使用 SETUSER 模拟用户 mary 授予用户 joe 访问 computer_types 表的权限。

SETUSER 'mary'
go
GRANT SELECT ON computer_types TO joe
go
SETUSER
B. 使用 NORESET 选项

下例显示数据库所有者必须如何创建某些对象,然后使用最小权限测试它们的可用性。为简化起见,数据库所有者只想在整个会话期间维护授予 mary 的权限。

SETUSER 'mary' WITH NORESET
go
CREATE TABLE computer_types2
.
.
.
GRANT ...
go
SETUSER      /* This statement has no effect. */

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

请参见

DENY

GRANT

REVOKE

USE