ALTER USER (Transact-SQL)

重命名数据库用户或更改它的默认架构。

主题链接图标Transact-SQL 语法约定

语法

ALTER USER userName  
     WITH <set_item> [ ,...n ]

<set_item> ::= 
     NAME = newUserName 
     | DEFAULT_SCHEMA = schemaName
     | LOGIN = loginName

参数

  • userName
    指定在此数据库中用于识别该用户的名称。

  • LOGIN =loginName
    通过将用户的安全标识符 (SID) 更改为另一个登录名的 SID,使用户重新映射到该登录名。

  • NAME =newUserName
    指定此用户的新名称。newUserName 不能已存在于当前数据库中。

  • DEFAULT_SCHEMA =schemaName
    指定服务器在解析此用户的对象名时将搜索的第一个架构。

注释

如果 DEFAULT_SCHEMA 保持未定义状态,则用户将以 dbo 作为其默认架构。可以将 DEFAULT_SCHEMA 设置为数据库中当前不存在的架构。因此,可以在创建架构之前将 DEFAULT_SCHEMA 分配给用户。不能为映射到 Windows 组、证书或非对称密钥的用户指定 DEFAULT_SCHEMA。

重要说明重要提示

如果用户是 sysadmin 固定服务器角色的成员,则忽略 DEFAULT_SCHEMA 的值。sysadmin 固定服务器角色的所有成员的默认架构是 dbo。

仅当新用户名的 SID 与在数据库中记录的 SID 匹配时,才能更改映射到 Windows 登录名或组的用户的名称。此检查将帮助防止数据库中的 Windows 登录名欺骗。

使用 WITH LOGIN 子句可以将用户重新映射到一个不同的登录名。不能使用此子句重新映射以下用户:不具有登录名的用户、映射到证书的用户或映射到非对称密钥的用户。只能重新映射 SQL 用户和 Windows 用户(或组)。不能使用 WITH LOGIN 子句更改用户类型,例如将 Windows 帐户更改为 SQL Server 登录名。

如果满足以下条件,则用户的名称会自动重命名为登录名。

  • 用户是一个 Windows 用户。

  • 名称是一个 Windows 名称(包含反斜杠)。

  • 未指定新名称。

  • 当前名称不同于登录名。

如果不满足上述条件,则不会重命名用户,除非调用方另外调用了 NAME 子句。

注意注意

拥有 ALTER ANY USER 权限的用户可以更改任何用户的默认架构。更改了架构的用户可能会在不知情的情况下从错误表中选择数据,或者从错误架构中执行代码。

被映射到 SQL Server 登录名、证书或非对称密钥的用户名不能包含反斜杠字符 (\)。

注意事项注意

从 SQL Server 2005 开始,架构的行为发生了更改。因此,假设架构与数据库用户等价的代码不再返回正确的结果。旧目录视图(包括 sysobjects)不应该用在曾使用过下列任何 DDL 语句的数据库中:CREATE SCHEMA、ALTER SCHEMA、DROP SCHEMA、CREATE USER、ALTER USER、DROP USER、CREATE ROLE、ALTER ROLE、DROP ROLE、CREATE APPROLE、ALTER APPROLE、DROP APPROLE 或 ALTER AUTHORIZATION。在这类数据库中,必须改用新目录视图。新的目录视图将采用在 SQL Server 2005 中引入的使主体和架构分离的方法。有关目录视图的详细信息,请参阅目录视图 (Transact-SQL)。

权限

若要更改用户的名称或将用户重新映射到另一登录名,需要对数据库拥有 ALTER ANY USER 权限。若要更改默认架构,需要对用户拥有 ALTER 权限。用户只能更改自己的默认架构。

示例

A. 更改数据库用户的名称

下例将数据库用户 Mary5 的名称更改为 Mary51。

USE AdventureWorks2008R2;
ALTER USER Mary5 WITH NAME = Mary51;
GO 

B. 更改用户的默认架构

以下示例将用户 Mary51 的默认架构更改为 Purchasing。

USE AdventureWorks2008R2;
ALTER USER Mary51 WITH DEFAULT_SCHEMA = Purchasing;
GO