ALTER USER (Transact-SQL)

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

适用范围:SQL Server(SQL Server 2008 至当前版本),Azure SQL Database。

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

语法

-- SQL Server Syntax
ALTER USER userName  
     WITH <set_item> [ ,...n ]
[;]

<set_item> ::= 
      NAME = newUserName 
    | DEFAULT_SCHEMA = { schemaName | NULL }
    | LOGIN = loginName
    | PASSWORD = 'password' [ OLD_PASSWORD = 'oldpassword' ]
    | DEFAULT_LANGUAGE = { NONE | <lcid> | <language name> | <language alias> }

-- Windows Azure SQL Database Syntax
ALTER USER userName  
     WITH <set_item> [ ,...n ]

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

-- SQL Database syntax when connected to a federation member
ALTER USER userName
     WITH <set_item> [ ,… n ] 
[;]

<set_item> ::= 
     NAME = newUserName

参数

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

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

    如果 ALTER USER 语句是 SQL 批处理中唯一的语句,则 Windows Azure SQL Database 将支持 WITH LOGIN 子句。 如果 ALTER USER 语句不是 SQL 批处理中唯一的语句或在动态 SQL 中执行,则不支持 WITH LOGIN 子句。

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

  • DEFAULT_SCHEMA = { schemaName | NULL }
    指定服务器在解析此用户的对象名时将搜索的第一个架构。 将默认架构设置为 NULL 将从 Windows 组中删除默认架构。 Windows 用户不能使用 NULL 选项。

  • PASSWORD = 'password'

    适用范围:SQL Server 2012 到 SQL Server 2014。

    指定正在更改的用户的密码。 密码是区分大小写的。

    备注

    此选项仅适用于包含的用户。有关详细信息,请参阅包含数据库sp_migrate_user_to_contained (Transact-SQL)

  • OLD_PASSWORD ='oldpassword'

    适用范围:SQL Server 2012 到 SQL Server 2014。

    将替换为 password 的当前用户密码。 密码是区分大小写的。 除非您拥有 ALTER ANY USER 权限,否则需要具有 OLD_PASSWORD 才能更改密码。 需要 OLD_PASSWORD 可防止拥有 IMPERSONATION 权限的用户更改密码。

    备注

    此选项仅适用于包含的用户。

  • DEFAULT_LANGUAGE ={ NONE | <lcid> | <language name> | <language alias> }

    适用范围:SQL Server 2012 到 SQL Server 2014。

    指定将指派给用户的默认语言。 如果将此选项设置为 NONE,则默认语言将设置为数据库的当前默认语言。 如果之后更改数据库的默认语言,用户的默认语言将保持不变。 DEFAULT_LANGUAGE 可以为本地 ID (lcid)、语言的名称或语言别名。

    备注

    此选项只能在包含数据库中指定,且只能用于包含的用户。

注释

默认架构将是服务器为此数据库用户解析对象名时将搜索的第一个架构。 除非另外指定,否则默认架构将是此数据库用户创建的对象所属的架构。

如果用户具有默认架构,则将使用默认架构。 如果用户不具有默认架构,但该用户是具有默认架构的组的成员,则将使用该组的默认架构。 如果用户不具有默认架构而且是多个组的成员,则该用户的默认架构将是具有最低 principle_id 的 Windows 组的架构和一个显式设置的默认架构。 如果不能为用户确定默认架构,则将使用 dbo 架构。

可以将 DEFAULT_SCHEMA 设置为数据库中当前不存在的架构。 因此,可以在创建架构之前将 DEFAULT_SCHEMA 分配给用户。

不能为映射到证书或非对称密钥的用户指定 DEFAULT_SCHEMA。

重要说明重要提示

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

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

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

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

  • 用户是一个 Windows 用户。

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

  • 未指定新名称。

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

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

被映射到 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 ANY USER 权限。

若要更改对数据库具有 CONTROL 权限的用户的名称、目标登录名或 SID,需要对数据库具有 CONTROL 权限。

若要更改默认架构或语言,需要对用户拥有 ALTER 权限。 用户只能更改自己的默认架构或语言。

示例

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

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

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

B.更改用户的默认架构

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

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

C.同时更改几个选项

以下示例可在一个语句中为一个包含数据库用户更改若干个选项。

适用范围:SQL Server 2012 到 SQL Server 2014。

USE AdventureWorks2012;
GO 
ALTER USER Philip 
WITH  NAME = Philipe 
    , DEFAULT_SCHEMA = Development 
    , PASSWORD = 'W1r77TT98%ab@#’ OLD_PASSWORD = 'New Devel0per' 
    , DEFAULT_LANGUAGE  = French ;
GO

请参阅

参考

CREATE USER (Transact-SQL)

DROP USER (Transact-SQL)

EVENTDATA (Transact-SQL)

sp_migrate_user_to_contained (Transact-SQL)

概念

包含数据库