ALTER USER (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 权限。用户只能更改自己的默认架构。
若要将用户重命名为某个登录名,需要拥有数据库的 CONTROL 权限。
示例
A. 更改数据库用户的名称
下例将数据库用户 Mary5 的名称更改为 Mary51。
USE AdventureWorks;
ALTER USER Mary5 WITH NAME = Mary51;
GO
B. 更改用户的默认架构
以下示例将用户 Mary51 的默认架构更改为 Purchasing。
USE AdventureWorks;
ALTER USER Mary51 WITH DEFAULT_SCHEMA = Purchasing;
GO