ALTER USER (Transact-SQL)
重命名数据库用户或更改它的默认架构。
注意
Microsoft Entra ID 以前称为 Azure Active Directory (Azure AD)。
选择一个产品
在下面的行中,选择你感兴趣的产品名称,系统将只显示该产品的信息。
* SQL Server *
SQL Server
语法
-- Syntax for SQL Server
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> }
| ALLOW_ENCRYPTED_VALUE_MODIFICATIONS = [ ON | OFF ]
参数
userName 指定在此数据库中用于识别该用户的名称。
LOGIN = loginName 通过将用户的安全标识符 (SID) 更改为另一个登录名的 SID,使用户重新映射到该登录名。
NAME = newUserName 指定此用户的新名称。 newUserName 不能已存在于当前数据库中。
DEFAULT_SCHEMA = { schemaName | NULL } 指定服务器在解析此用户的对象名时将搜索的第一个架构。 将默认架构设置为 NULL 将从 Windows 组中删除默认架构。 Windows 用户不能使用 NULL 选项。
PASSWORD = 'password' 适用于:SQL Server 2012 (11.x) 及更高版本和 SQL 数据库。
指定正在更改的用户的密码。 密码是区分大小写的。
注意
此选项仅适用于包含的用户。 有关详细信息,请参阅包含的数据库和 sp_migrate_user_to_contained (Transact-SQL)。
OLD_PASSWORD = 'oldpassword' 适用于:SQL Server 2012 (11.x) 及更高版本和 SQL 数据库。
将替换为“password”的当前用户密码。 密码是区分大小写的。 除非拥有 ALTER ANY USER 权限,否则需要具有 OLD_PASSWORD 才能更改密码。 需要 OLD_PASSWORD 可防止拥有 IMPERSONATION 权限的用户更改密码。
注意
此选项仅适用于包含的用户。
DEFAULT_LANGUAGE ={ NONE | <lcid> | <language name> | <language alias> } 适用于:SQL Server 2012 (11.x) 和更高版本。
指定将指派给用户的默认语言。 如果将此选项设置为 NONE,则默认语言将设置为数据库的当前默认语言。 如果之后更改数据库的默认语言,用户的默认语言将保持不变。 DEFAULT_LANGUAGE 可以为本地 ID (lcid)、语言的名称或语言别名。
注意
此选项只能在包含数据库中指定,且只能用于包含的用户。
ALLOW_ENCRYPTED_VALUE_MODIFICATIONS = [ ON | OFF ] 适用于:SQL Server 2016 (13.x) 及更高版本、SQL 数据库。
取消在大容量复制操作期间对服务器进行加密元数据检查。 这使用户能够在表或数据库之间大容量复制加密数据,而无需对数据进行解密。 默认为 OFF。
警告
错误使用此选项可能导致数据损坏。 有关详细信息,请参阅迁移通过 Always Encrypted 保护的敏感数据。
备注
默认架构将是服务器为此数据库用户解析对象名时将搜索的第一个架构。 除非另外指定,否则默认架构将是此数据库用户创建的对象所属的架构。
如果用户具有默认架构,则将使用默认架构。 如果用户不具有默认架构,但该用户是具有默认架构的组的成员,则将使用该组的默认架构。 如果用户不具有默认架构而且是多个组的成员,则该用户的默认架构将是具有最低 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 登录名。
如果从另一台服务器还原数据库,并将数据库用户映射到 SQL Server 登录,则 SID 可能会不匹配。 使用 WITH LOGIN 子句,将数据库中的用户 SID 替换为服务器中的登录 SID,可以修正此情况。
如果满足以下条件,则用户的名称会自动重命名为登录名。
用户是一个 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 权限。
若要更改对数据库拥有 CONTROL 权限的用户名名称,则需要对数据库拥有 CONTROL 权限 。
更改默认架构或语言需要对用户拥有 ALTER 权限。 用户可更改自己的默认架构或语言。
示例
所有示例都在用户数据库中执行。
A. 更改数据库用户的名称
以下示例将数据库用户 Mary5
的名称更改为 Mary51
。
ALTER USER Mary5 WITH NAME = Mary51;
GO
B. 更改用户的默认架构
以下示例将用户 Mary51
的默认架构更改为 Purchasing
。
ALTER USER Mary51 WITH DEFAULT_SCHEMA = Purchasing;
GO
C. 同时更改几个选项
以下示例可在一个语句中为一个包含数据库用户更改若干个选项。
适用于:SQL Server 2012 (11.x) 及更高版本。
ALTER USER Philip
WITH NAME = Philipe
, DEFAULT_SCHEMA = Development
, PASSWORD = 'W1r77TT98%ab@#' OLD_PASSWORD = 'New Devel0per'
, DEFAULT_LANGUAGE= French ;
GO
D. 修正不匹配的 SID
以下示例将数据库中的用户 SID 修正为与服务器上的 SID 匹配,进而执行经过验证的 SQL Server 登录。
ALTER USER Mai
WITH LOGIN = Mai;
GO
另请参阅
* SQL 数据库 *
SQL 数据库
语法
-- Syntax for Azure SQL Database
ALTER USER userName
WITH <set_item> [ ,...n ]
<set_item> ::=
NAME = newUserName
| DEFAULT_SCHEMA = schemaName
| LOGIN = loginName
| ALLOW_ENCRYPTED_VALUE_MODIFICATIONS = [ ON | OFF ]
[;]
-- Azure SQL Database Update Syntax
ALTER USER userName
WITH <set_item> [ ,...n ]
[;]
<set_item> ::=
NAME = newUserName
| DEFAULT_SCHEMA = { schemaName | NULL }
| LOGIN = loginName
| PASSWORD = 'password' [ OLD_PASSWORD = 'oldpassword' ]
| ALLOW_ENCRYPTED_VALUE_MODIFICATIONS = [ ON | OFF ]
-- 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 批处理中唯一的语句,则 Azure SQL 数据库将支持 WITH LOGIN 子句。 如果 ALTER USER 语句不是 SQL 批处理中唯一的语句或在动态 SQL 中执行,则不支持 WITH LOGIN 子句。
NAME = newUserName 指定此用户的新名称。 newUserName 不能已存在于当前数据库中。
DEFAULT_SCHEMA = { schemaName | NULL } 指定服务器在解析此用户的对象名时将搜索的第一个架构。 将默认架构设置为 NULL 将从 Windows 组中删除默认架构。 Windows 用户不能使用 NULL 选项。
PASSWORD = 'password' 适用于:SQL Server 2012 (11.x) 及更高版本和 SQL 数据库。
指定正在更改的用户的密码。 密码是区分大小写的。
注意
此选项仅适用于包含的用户。 有关详细信息,请参阅包含的数据库和 sp_migrate_user_to_contained (Transact-SQL)。
OLD_PASSWORD = 'oldpassword' 适用于:SQL Server 2012 (11.x) 及更高版本和 SQL 数据库。
将替换为“password”的当前用户密码。 密码是区分大小写的。 除非拥有 ALTER ANY USER 权限,否则需要具有 OLD_PASSWORD 才能更改密码。 需要 OLD_PASSWORD 可防止拥有 IMPERSONATION 权限的用户更改密码。
注意
此选项仅适用于包含的用户。
ALLOW_ENCRYPTED_VALUE_MODIFICATIONS = [ ON | OFF ] 适用于:SQL Server 2016 (13.x) 及更高版本、SQL 数据库。
取消在大容量复制操作期间对服务器进行加密元数据检查。 这使用户能够在表或数据库之间大容量复制加密数据,而无需对数据进行解密。 默认为 OFF。
警告
错误使用此选项可能导致数据损坏。 有关详细信息,请参阅迁移通过 Always Encrypted 保护的敏感数据。
备注
默认架构将是服务器为此数据库用户解析对象名时将搜索的第一个架构。 除非另外指定,否则默认架构将是此数据库用户创建的对象所属的架构。
如果用户具有默认架构,则将使用默认架构。 如果用户不具有默认架构,但该用户是具有默认架构的组的成员,则将使用该组的默认架构。 如果用户不具有默认架构而且是多个组的成员,则该用户的默认架构将是具有最低 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 权限。
若要更改对数据库拥有 CONTROL 权限的用户名名称,则需要对数据库拥有 CONTROL 权限 。
更改默认架构或语言需要对用户拥有 ALTER 权限。 用户可更改自己的默认架构或语言。
示例
所有示例都在用户数据库中执行。
A. 更改数据库用户的名称
以下示例将数据库用户 Mary5
的名称更改为 Mary51
。
ALTER USER Mary5 WITH NAME = Mary51;
GO
B. 更改用户的默认架构
以下示例将用户 Mary51
的默认架构更改为 Purchasing
。
ALTER USER Mary51 WITH DEFAULT_SCHEMA = Purchasing;
GO
C. 同时更改几个选项
以下示例可在一个语句中为一个包含数据库用户更改若干个选项。
ALTER USER Philip
WITH NAME = Philipe
, DEFAULT_SCHEMA = Development
, PASSWORD = 'W1r77TT98%ab@#' OLD_PASSWORD = 'New Devel0per';
GO
另请参阅
* SQL 托管实例 *
Azure SQL 托管实例
语法
重要
Microsoft Entra 登录名的用户时,仅支持以下Azure SQL 托管实例选项:DEFAULT_SCHEMA = { schemaName | NULL }
添加了DEFAULT_LANGUAGE = { NONE | lcid | language name | language alias }
新的语法扩展,以帮助重新映射迁移到Azure SQL 托管实例的数据库中的用户。 ALTER USER 语法可帮助将联合域中的数据库用户与 Microsoft Entra ID 映射到 Microsoft Entra 登录名。
-- Syntax for SQL Managed Instance
ALTER USER userName
{ WITH <set_item> [ ,...n ] | FROM EXTERNAL PROVIDER }
[;]
<set_item> ::=
NAME = newUserName
| DEFAULT_SCHEMA = { schemaName | NULL }
| LOGIN = loginName
| PASSWORD = 'password' [ OLD_PASSWORD = 'oldpassword' ]
| DEFAULT_LANGUAGE = { NONE | <lcid> | <language name> | <language alias> }
| ALLOW_ENCRYPTED_VALUE_MODIFICATIONS = [ ON | OFF ]
-- Users or groups that are migrated as federated and synchronized with Azure AD have the following syntax:
/** Applies to Windows users that were migrated and have the following user names:
- Windows user <domain\user>
- Windows group <domain\MyWindowsGroup>
- Windows alias <MyWindowsAlias>
**/
ALTER USER userName
{ WITH <set_item> [ ,...n ] | FROM EXTERNAL PROVIDER }
[;]
<set_item> ::=
NAME = newUserName
| DEFAULT_SCHEMA = { schemaName | NULL }
| LOGIN = loginName
| DEFAULT_LANGUAGE = { NONE | <lcid> | <language name> | <language alias> }
参数
userName 指定在此数据库中用于识别该用户的名称。
LOGIN = loginName 通过将用户的安全标识符 (SID) 更改为另一个登录名的 SID,使用户重新映射到该登录名。
如果 ALTER USER 语句是 SQL 批处理中唯一的语句,则 Azure SQL 数据库将支持 WITH LOGIN 子句。 如果 ALTER USER 语句不是 SQL 批处理中唯一的语句或在动态 SQL 中执行,则不支持 WITH LOGIN 子句。
NAME = newUserName 指定此用户的新名称。 newUserName 不能已存在于当前数据库中。
DEFAULT_SCHEMA = { schemaName | NULL } 指定服务器在解析此用户的对象名时将搜索的第一个架构。 将默认架构设置为 NULL 将从 Windows 组中删除默认架构。 Windows 用户不能使用 NULL 选项。
PASSWORD = 'password'
指定正在更改的用户的密码。 密码是区分大小写的。
注意
此选项仅适用于包含的用户。 有关详细信息,请参阅包含的数据库和 sp_migrate_user_to_contained (Transact-SQL)。
OLD_PASSWORD = 'oldpassword'
将替换为“password”的当前用户密码。 密码是区分大小写的。 除非拥有 ALTER ANY USER 权限,否则需要具有 OLD_PASSWORD 才能更改密码。 需要 OLD_PASSWORD 可防止拥有 IMPERSONATION 权限的用户更改密码。
注意
此选项仅适用于包含的用户。
DEFAULT_LANGUAGE ={ NONE | <lcid> | <language name> | <language alias> }
指定将指派给用户的默认语言。 如果将此选项设置为 NONE,则默认语言将设置为数据库的当前默认语言。 如果之后更改数据库的默认语言,用户的默认语言将保持不变。 DEFAULT_LANGUAGE 可以为本地 ID (lcid)、语言的名称或语言别名。
注意
此选项只能在包含数据库中指定,且只能用于包含的用户。
ALLOW_ENCRYPTED_VALUE_MODIFICATIONS = [ ON | OFF ]
取消在大容量复制操作期间对服务器进行加密元数据检查。 这使用户能够在表或数据库之间大容量复制加密数据,而无需对数据进行解密。 默认为 OFF。
警告
错误使用此选项可能导致数据损坏。 有关详细信息,请参阅迁移通过 Always Encrypted 保护的敏感数据。
备注
默认架构将是服务器为此数据库用户解析对象名时将搜索的第一个架构。 除非另外指定,否则默认架构将是此数据库用户创建的对象所属的架构。
如果用户具有默认架构,则将使用默认架构。 如果用户不具有默认架构,但该用户是具有默认架构的组的成员,则将使用该组的默认架构。 如果用户不具有默认架构而且是多个组的成员,则该用户的默认架构将是具有最低 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 用户更改为 Microsoft Entra 用户。
注意
以下规则不适用于 Azure SQL 托管实例上的 Windows 用户,因为我们不支持在 Azure SQL 托管实例上创建 Windows 登录名。 仅当存在 Microsoft Entra 登录名时,才能使用 WITH LOGIN 选项。
如果满足以下条件,则用户的名称会自动重命名为登录名。
用户是一个 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)。
关于迁移到 Azure SQL 托管实例的 SQL 本地 Windows 用户的备注
这些备注适用于在已联合并与 Microsoft Entra ID 同步的 Windows 用户进行身份验证。
- 默认情况下,在用于迁移的 ALTER USER 语法的所有版本中,通过图形 API 验证映射到 Microsoft Entra ID 的 Windows 用户或组。
- 具有别名的本地用户(使用与原始 Windows 帐户不同的名称)将保留别名。
- 对于Microsoft Entra 身份验证,LOGIN 参数仅适用于Azure SQL 托管实例,不能用于SQL 数据库。
- 若要查看 Microsoft Entra 主体的登录名,请使用以下命令:
select * from sys.server_principals
。
- 检查登录名的指示类型是
E
还是X
。 - PASSWORD 选项不能用于Microsoft Entra 用户。
- 在所有迁移情况下,Windows 用户或组的角色和权限将自动传输到新的Microsoft Entra 用户或组。
- FROM EXTERNAL PROVIDER 是一个新的语法扩展,可用于将 Windows 用户和组从本地 SQL 更改为 Microsoft Entra 用户和组。 使用此扩展时,Windows 域必须与 Microsoft Entra ID 联合,并且所有 Windows 域成员必须存在于 Microsoft Entra ID 中。 FROM EXTERNAL PROVIDER 语法适用于Azure SQL 托管实例,应在 Windows 用户没有原始 SQL 实例上的登录名的情况下使用,并且需要映射到独立Microsoft Entra 数据库用户。
- 在这种情况下,允许的用户名可以是:
- Widows 用户(域\用户)。
- Windows 组(MyWidnowsGroup)。
- Windows 别名(MyWindowsAlias)。
- ALTER 命令的结果将旧 userName 替换为根据旧 userName 的原始 SID 在 Microsoft Entra ID 中找到的相应名称。 更改的名称将被替换并存储在数据库的元数据中:
- (domain\user) 将替换为 Microsoft Entra user@domain.com。
- (domain\MyWidnowsGroup)将替换为Microsoft Entra 组。
- (MyWindowsAlias)将保持不变,但此用户的 SID 将签入Microsoft Entra ID。
注意
如果在 Microsoft Entra ID 中找不到转换为 objectID 的原始用户的 SID,则 ALTER USER 命令将失败。
- 若要查看更改的用户,请使用以下命令:
select * from sys.database_principals
- 检查用户的指示类型
E
还是X
。 - 当 NAME 用于将 Windows 用户迁移到 Microsoft Entra 用户时,将应用以下限制:
- 必须指定有效的 LOGIN。
- 名称将签入Microsoft Entra ID,只能:
- LOGIN 的名称。
- 别名 - 名称不存在于Microsoft Entra ID 中。
- 在所有其他情况下,语法将失败。
安全性
注意
拥有 ALTER ANY USER 权限的用户可以更改任何用户的默认架构。 更改了架构的用户可能会在不知情的情况下从错误表中选择数据,或者从错误架构中执行代码。
权限
更改用户名需要具有 ALTER ANY USER 权限。
更改用户的目标登录名需要对数据库拥有 CONTROL 权限。
若要更改对数据库拥有 CONTROL 权限的用户名名称,则需要对数据库拥有 CONTROL 权限 。
更改默认架构或语言需要对用户拥有 ALTER 权限。 用户可更改自己的默认架构或语言。
示例
所有示例都在用户数据库中执行。
A. 更改数据库用户的名称
以下示例将数据库用户 Mary5
的名称更改为 Mary51
。
ALTER USER Mary5 WITH NAME = Mary51;
GO
B. 更改用户的默认架构
以下示例将用户 Mary51
的默认架构更改为 Purchasing
。
ALTER USER Mary51 WITH DEFAULT_SCHEMA = Purchasing;
GO
C. 同时更改几个选项
以下示例可在一个语句中为一个包含数据库用户更改若干个选项。
ALTER USER Philip
WITH NAME = Philipe
, DEFAULT_SCHEMA = Development
, PASSWORD = 'W1r77TT98%ab@#' OLD_PASSWORD = 'New Devel0per'
, DEFAULT_LANGUAGE= French ;
GO
D. 将数据库中的用户映射到迁移后的 Microsoft Entra 登录名
以下示例将用户 westus/joe
重新映射到 Microsoft Entra 用户 joe@westus.com
。 此示例适用于已存在于托管实例中的登录名。 完成到Azure SQL 托管实例的数据库迁移后,需要执行此操作,并想要使用 Microsoft Entra 登录名进行身份验证。
ALTER USER [westus/joe] WITH LOGIN = [joe@westus.com]
E. 将数据库中没有 Azure SQL 托管实例登录名的旧 Windows 用户映射到 Microsoft Entra 用户
以下示例将用户重新映射到 westus/joe
Microsoft Entra 用户 joe@westus.com
,而不使用登录名。 联合用户必须存在于 Microsoft Entra ID 中。
ALTER USER [westus/joe] FROM EXTERNAL PROVIDER
F. 将用户别名映射到现有的 Microsoft Entra 登录名
以下示例将用户名 westus\joe
重新映射到 joe_alias
。 在本例中,相应的Microsoft Entra 登录名为 joe@westus.com
。
ALTER USER [westus/joe] WITH LOGIN = [joe@westus.com], name= joe_alias
G. 将Azure SQL 托管实例中迁移的 Windows 组映射到 Microsoft Entra 组
以下示例将旧的本地组 westus\mygroup
重新映射到托管实例中的 Microsoft Entra 组 mygroup
。 组必须存在于 Microsoft Entra ID 中。
ALTER USER [westus\mygroup] WITH LOGIN = mygroup
另请参阅
* Azure Synapse
Analytics *
Azure Synapse Analytics
语法
-- Syntax for Azure Synapse
ALTER USER userName
WITH <set_item> [ ,...n ]
<set_item> ::=
NAME = newUserName
| LOGIN = loginName
| DEFAULT_SCHEMA = schema_name
[;]
参数
userName 指定在此数据库中用于识别该用户的名称。
LOGIN = loginName 通过将用户的安全标识符 (SID) 更改为另一个登录名的 SID,使用户重新映射到该登录名。
如果 ALTER USER 语句是 SQL 批处理中唯一的语句,则 Azure SQL 数据库将支持 WITH LOGIN 子句。 如果 ALTER USER 语句不是 SQL 批处理中唯一的语句或在动态 SQL 中执行,则不支持 WITH LOGIN 子句。
NAME = newUserName 指定此用户的新名称。 newUserName 不能已存在于当前数据库中。
DEFAULT_SCHEMA = { schemaName | NULL } 指定服务器在解析此用户的对象名时将搜索的第一个架构。 将默认架构设置为 NULL 将从 Windows 组中删除默认架构。 Windows 用户不能使用 NULL 选项。
备注
默认架构将是服务器为此数据库用户解析对象名时将搜索的第一个架构。 除非另外指定,否则默认架构将是此数据库用户创建的对象所属的架构。
如果用户具有默认架构,则将使用默认架构。 如果用户不具有默认架构,但该用户是具有默认架构的组的成员,则将使用该组的默认架构。 如果用户不具有默认架构而且是多个组的成员,则该用户的默认架构将是具有最低 principle_id 的 Windows 组的架构和一个显式设置的默认架构。 如果不能为用户确定默认架构,则将使用 dbo 架构。
可以将 DEFAULT_SCHEMA 设置为数据库中当前不存在的架构。 因此,可以在创建架构之前将 DEFAULT_SCHEMA 分配给用户。
不能为映射到证书或非对称密钥的用户指定 DEFAULT_SCHEMA。
重要
如果用户是 sysadmin 固定服务器角色的成员,则忽略 DEFAULT_SCHEMA 的值。 sysadmin 固定服务器角色的所有成员都有默认架构 dbo
。
使用 WITH LOGIN 子句可以将用户重新映射到一个不同的登录名。 不能使用此子句重新映射以下用户:不具有登录名的用户、映射到证书的用户或映射到非对称密钥的用户。 只能重新映射 SQL 用户和 Windows 用户(或组)。 不能使用 WITH LOGIN 子句更改用户类型,例如将 Windows 帐户更改为 SQL Server 登录名。
如果满足以下条件,则用户的名称会自动重命名为登录名。
未指定新名称。
当前名称不同于登录名。
如果不满足上述条件,则不会重命名用户,除非调用方另外调用了 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 权限。
若要更改对数据库拥有 CONTROL 权限的用户名名称,则需要对数据库拥有 CONTROL 权限 。
更改默认架构或语言需要对用户拥有 ALTER 权限。 用户可更改自己的默认架构或语言。
示例
所有示例都在用户数据库中执行。
A. 更改数据库用户的名称
以下示例将数据库用户 Mary5
的名称更改为 Mary51
。
ALTER USER Mary5 WITH NAME = Mary51;
GO
B. 更改用户的默认架构
以下示例将用户 Mary51
的默认架构更改为 Purchasing
。
ALTER USER Mary51 WITH DEFAULT_SCHEMA = Purchasing;
GO
另请参阅
* Analytics
Platform System (PDW) *
分析平台系统
语法
-- Syntax for Analytics Platform System
ALTER USER userName
WITH <set_item> [ ,...n ]
<set_item> ::=
NAME = newUserName
| LOGIN = loginName
| DEFAULT_SCHEMA = schema_name
[;]
参数
userName 指定在此数据库中用于识别该用户的名称。
LOGIN = loginName 通过将用户的安全标识符 (SID) 更改为另一个登录名的 SID,使用户重新映射到该登录名。
如果 ALTER USER 语句是 SQL 批处理中唯一的语句,则 Azure SQL 数据库将支持 WITH LOGIN 子句。 如果 ALTER USER 语句不是 SQL 批处理中唯一的语句或在动态 SQL 中执行,则不支持 WITH LOGIN 子句。
NAME = newUserName 指定此用户的新名称。 newUserName 不能已存在于当前数据库中。
DEFAULT_SCHEMA = { schemaName | NULL } 指定服务器在解析此用户的对象名时将搜索的第一个架构。 将默认架构设置为 NULL 将从 Windows 组中删除默认架构。 Windows 用户不能使用 NULL 选项。
备注
默认架构将是服务器为此数据库用户解析对象名时将搜索的第一个架构。 除非另外指定,否则默认架构将是此数据库用户创建的对象所属的架构。
如果用户具有默认架构,则将使用默认架构。 如果用户不具有默认架构,但该用户是具有默认架构的组的成员,则将使用该组的默认架构。 如果用户不具有默认架构而且是多个组的成员,则该用户的默认架构将是具有最低 principle_id 的 Windows 组的架构和一个显式设置的默认架构。 如果不能为用户确定默认架构,则将使用 dbo 架构。
可以将 DEFAULT_SCHEMA 设置为数据库中当前不存在的架构。 因此,可以在创建架构之前将 DEFAULT_SCHEMA 分配给用户。
不能为映射到证书或非对称密钥的用户指定 DEFAULT_SCHEMA。
重要
如果用户是 sysadmin 固定服务器角色的成员,则忽略 DEFAULT_SCHEMA 的值。 sysadmin 固定服务器角色的所有成员都有默认架构 dbo
。
使用 WITH LOGIN 子句可以将用户重新映射到一个不同的登录名。 不能使用此子句重新映射以下用户:不具有登录名的用户、映射到证书的用户或映射到非对称密钥的用户。 只能重新映射 SQL 用户和 Windows 用户(或组)。 不能使用 WITH LOGIN 子句更改用户类型,例如将 Windows 帐户更改为 SQL Server 登录名。
如果满足以下条件,则用户的名称会自动重命名为登录名。
未指定新名称。
当前名称不同于登录名。
如果不满足上述条件,则不会重命名用户,除非调用方另外调用了 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 权限。
若要更改对数据库拥有 CONTROL 权限的用户名名称,则需要对数据库拥有 CONTROL 权限 。
更改默认架构或语言需要对用户拥有 ALTER 权限。 用户可更改自己的默认架构或语言。
示例
所有示例都在用户数据库中执行。
A. 更改数据库用户的名称
以下示例将数据库用户 Mary5
的名称更改为 Mary51
。
ALTER USER Mary5 WITH NAME = Mary51;
GO
B. 更改用户的默认架构
以下示例将用户 Mary51
的默认架构更改为 Purchasing
。
ALTER USER Mary51 WITH DEFAULT_SCHEMA = Purchasing;
GO