ALTER USER语句
MySQL帐户信息存储在mysql
系统架构的表中。在“MySQL服务器管理”中将广泛讨论此数据库和访问控制系统,有关更多详细信息,请查阅。
重要一些MySQL版本对授予表进行了更改,以添加新的特权或功能。为了确保您可以利用所有新功能,每当升级MySQL时,将授权表更新为当前结构。请参见“升级MySQL”。
当read_only
启用了系统变量,账户管理语句需要CONNECTION_ADMIN
或SUPER
特权,除了任何其他所需的权限。这是因为它们会修改mysql
系统架构中的表。
帐户管理对帐单是原子性的,不会崩溃。
ALTER USER [IF EXISTS ] user [auth_option] [, user [auth_option]] ... [REQUIRE {NONE | tls_option [[AND] tls_option] ...}] [WITH resource_option [resource_option] ...] [password_option | lock_option] ...ALTER USER [IF EXISTS ] USER() user_func_auth_optionALTER USER [IF EXISTS ] userDEFAULT ROLE {NONE |ALL | role [, role ] ...} user: (see Section 6.2.4, “SpecifyingAccount Names ”) auth_option: {IDENTIFIED BY 'auth_string' [REPLACE 'current_auth_string'] [RETAIN CURRENT PASSWORD ] |IDENTIFIED BY RANDOM PASSWORD [REPLACE 'current_auth_string'] [RETAIN CURRENT PASSWORD ] |IDENTIFIED WITH auth_plugin |IDENTIFIED WITH auth_pluginBY 'auth_string' [REPLACE 'current_auth_string'] [RETAIN CURRENT PASSWORD ] |IDENTIFIED WITH auth_pluginBY RANDOM PASSWORD [REPLACE 'current_auth_string'] [RETAIN CURRENT PASSWORD ] |IDENTIFIED WITH auth_pluginAS 'auth_string' |DISCARD OLD PASSWORD } user_func_auth_option: {IDENTIFIED BY 'auth_string' [REPLACE 'current_auth_string'] [RETAIN CURRENT PASSWORD ] |DISCARD OLD PASSWORD } tls_option: {SSL |X509 |CIPHER 'cipher' |ISSUER 'issuer' |SUBJECT 'subject' } resource_option: {MAX_QUERIES_PER_HOUR count |MAX_UPDATES_PER_HOUR count |MAX_CONNECTIONS_PER_HOUR count |MAX_USER_CONNECTIONS count } password_option: {PASSWORD EXPIRE [DEFAULT |NEVER |INTERVAL N DAY] |PASSWORD HISTORY {DEFAULT | N} |PASSWORD REUSE INTERVAL {DEFAULT | N DAY} |PASSWORD REQUIRE CURRENT [DEFAULT |OPTIONAL ] |FAILED_LOGIN_ATTEMPTS N |PASSWORD_LOCK_TIME {N |UNBOUNDED } } lock_option: {ACCOUNT LOCK |ACCOUNT UNLOCK }
该ALTER USER
语句修改了MySQL帐户。它允许为现有帐户修改身份验证,角色,SSL / TLS,资源限制和密码管理属性。它也可以用于锁定和解锁帐户。
在大多数情况下,ALTER USER
需要全局CREATE USER
特权或系统架构的UPDATE
特权mysql
。例外是:
使用非匿名帐户连接到服务器的任何客户端都可以更改该帐户的密码。(特别是,您可以更改自己的密码。)要参见服务器将您用作身份验证的帐户,请调用以下
CURRENT_USER()
功能:SELECT CURRENT_USER();对于
DEFAULT ROLE
语法,ALTER USER
需要以下特权:- 为另一个用户设置默认角色需要全局
CREATE USER
特权或系统表的UPDATE
特权mysql.default_roles
。 - 为自己设置默认角色不需要特殊特权,只要已将想要的默认角色授予您即可。
- 为另一个用户设置默认角色需要全局
修改辅助密码的语句需要以下特权:
- 该
APPLICATION_PASSWORD_ADMIN
权限才能使用RETAIN CURRENT PASSWORD
或DISCARD OLD PASSWORD
子句ALTER USER
应用到自己的帐户报表。由于大多数用户仅需要一个密码,因此需要特权来操作您自己的辅助密码。 - 如果要允许一个帐户操作所有帐户的辅助密码,则它需要
CREATE USER
特权而不是APPLICATION_PASSWORD_ADMIN
。
- 该
当read_only
启用了系统变量,ALTER USER
另外需要CONNECTION_ADMIN
或SUPER
特权。
默认情况下,如果您尝试修改不存在的用户,则会发生错误。如果IF EXISTS
给出了该子句,则该语句将为每个不存在的命名用户生成警告,而不是错误。
重要在某些情况下,
ALTER USER
可能会记录在服务器日志中或客户端的历史记录文件中,例如~/.mysql_history
,这意味着具有对该信息的读取访问权限的任何人都可以读取明文密码。有关服务器日志发生这种情况的条件以及如何控制它的信息,有关客户端日志记录的类似信息,请参见“ mysql客户端日志记录”。
该ALTER USER
语句有多个方面,在以下主题下进行了描述:
- ALTER USER概述
- ALTER USER身份验证选项
- ALTER USER角色选项
- ALTER USER SSL / TLS选项
- ALTER USER资源限制选项
- ALTER USER密码管理选项
- ALTER USER帐户锁定选项
- ALTER USER二进制记录
ALTER USER概述
对于每个受影响的帐户,ALTER USER
修改mysql.user
系统表中的相应行以反映该语句中指定的属性。未指定的属性保留其当前值。
每个帐户名均使用“指定帐户名”中所述的格式。帐户名的主机名部分(如果省略)默认为'%'
。也可以指定CURRENT_USER
或CURRENT_USER()
引用与当前会话关联的帐户。
仅对于一种语法,可以使用以下USER()
功能指定帐户:
ALTER USER USER()IDENTIFIED BY 'auth_string';
使用此语法可以更改您自己的密码,而无需按实际名称命名您的帐户。(语法还支持REPLACE
,RETAIN CURRENT PASSWORD
以及DISCARD OLD PASSWORD
在所描述的条款 ALTER用户认证选项。)
对于ALTER USER
允许auth_option
值跟随user
值的语法,请auth_option
通过指定帐户身份验证插件,凭据(例如密码)或同时指定两者来指示帐户如何进行身份验证。每个auth_option
值适用只到一个名为的前一个帐户。
根据user
规范,该语句可能包括SSL / TLS,资源限制,密码管理和锁定属性的选项。所有这些选项对于报表都是全局的,并且适用于报表中命名的所有帐户。
示例:更改帐户密码并使其过期。结果,用户必须使用指定的密码进行连接,并在下一次连接时选择一个新密码:
ALTER USER 'jeffrey'@'localhost'IDENTIFIED BY 'new_password'PASSWORD EXPIRE ;
示例:修改一个帐户以使用caching_sha2_password
身份验证插件和给定的密码。要求每180天选择一个新密码,并启用登录失败跟踪,以使三个连续的错误密码导致临时帐户锁定两天:
ALTER USER 'jeffrey'@'localhost'IDENTIFIED WITH caching_sha2_passwordBY 'new_password'PASSWORD EXPIRE INTERVAL 180 DAYFAILED_LOGIN_ATTEMPTS 3PASSWORD_LOCK_TIME 2;
示例:锁定或解锁帐户:
ALTER USER 'jeffrey'@'localhost'ACCOUNT LOCK ;ALTER USER 'jeffrey'@'localhost'ACCOUNT UNLOCK ;
示例:要求一个帐户使用SSL连接并每小时建立20个连接的限制:
ALTER USER 'jeffrey'@'localhost'REQUIRE SSL WITH MAX_CONNECTIONS_PER_HOUR 20;
示例:更改多个帐户,并指定一些每个帐户属性和一些全局属性:
ALTER USER 'jeffrey'@'localhost'IDENTIFIED BY 'jeffrey_new_password', 'jeanne'@'localhost', 'josh'@'localhost'IDENTIFIED BY 'josh_new_password'REPLACE 'josh_current_password'RETAIN CURRENT PASSWORD REQUIRE SSL WITH MAX_USER_CONNECTIONS 2PASSWORD HISTORY 5;
IDENTIFIED BY
following 的值jeffrey
仅适用于其前一个帐户,因此它将密码更改为 only 。对于,没有每个帐户的值(因此,密码保持不变)。对于,建立一个新密码(),指定该密码以验证发出该语句的用户是否知道当前密码(),并且该当前密码也保留为帐户辅助密码。(因此,可以使用主密码或辅助密码进行连接。)'jeffrey_new_password'
jeffrey
jeanne
josh
IDENTIFIED BY
'josh_new_password'
REPLACE
ALTER USER
'josh_current_password'
josh
其余属性全局应用于语句中命名的所有帐户,因此对于两个帐户:
- 使用SSL需要连接。
- 该帐户最多可用于两个同时连接。
- 密码更改不能重复使用五个最新密码中的任何一个。
示例:丢弃的辅助密码josh
,只保留其主密码帐户:
ALTER USER 'josh'@'localhost'DISCARD OLD PASSWORD ;
在没有特定类型的期权的情况下,该帐户在这方面保持不变。例如,如果没有锁定选项,则帐户的锁定状态不会更改。
ALTER USER身份验证选项
帐户名后可以带有一个auth_option
身份验证选项,该选项指定了帐户身份验证插件,凭据或两者。它还可能包括密码验证子句,该子句指定要替换的帐户当前密码,以及管理帐户是否具有辅助密码的子句。
注意随机密码生成,密码验证和辅助密码的条款仅适用于使用身份验证插件的帐户,该身份验证插件将凭据存储在内部。对于使用插件执行针对MySQL外部凭据系统进行身份验证的插件的帐户,密码管理也必须针对该系统从外部进行处理。有关内部凭据存储的更多信息,请参见“帐户密码管理”。
auth_plugin
命名身份验证插件。插件名称可以是带引号的字符串文字或不带引号的名称。插件名称存储在系统表的plugin
列中mysql.user
。对于
auth_option
未指定身份验证插件的语法,默认插件由default_authentication_plugin
系统变量的值指示。有关每个插件的说明,请参见“编写身份验证插件”。内部存储的凭证存储在
mysql.user
系统表中。一个值或指定帐户证书,无论是作为明文(未加密)的字符串或由认证插件预期与该帐户,分别相关联的格式散列:'auth_string'
RANDOM PASSWORD
- 对于使用的语法,该字符串为cleartext,并传递给身份验证插件以进行可能的哈希处理。插件返回的结果存储在表中。插件可以使用指定的值,在这种情况下,不会发生哈希。
BY 'auth_string'
mysql.user
对于使用的语法
BY RANDOM PASSWORD
,MySQL会生成一个随机密码和明文形式,并将其传递给身份验证插件以进行可能的哈希处理。插件返回的结果存储在mysql.user
表中。插件可以使用指定的值,在这种情况下,不会发生哈希。从MySQL 8.0.18开始,可以使用随机生成的密码,并且具有随机密码生成中所述的特征。
对于使用的语法,假定该字符串已采用身份验证插件所需的格式,并按原样存储在表中。如果插件需要散列值,则该值必须已经以适合于该插件的格式进行散列,否则该值将无法被该插件使用,并且不会进行客户端连接的正确身份验证。
AS 'auth_string'
mysql.user
从MySQL 8.0.17开始,散列的字符串可以是字符串文字或十六进制值。后者与启用系统变量
SHOW CREATE USER
时包含不可打印字符的密码哈希显示的值类型相对应print_identified_with_as_hex
。- 如果认证插件不对认证字符串进行散列,则and 子句具有相同的效果:认证字符串按原样存储在系统表中。
BY 'auth_string'
AS 'auth_string'
mysql.user
- 对于使用的语法,该字符串为cleartext,并传递给身份验证插件以进行可能的哈希处理。插件返回的结果存储在表中。插件可以使用指定的值,在这种情况下,不会发生哈希。
该子句执行密码验证,自MySQL 8.0.13起可用。如果给出:
REPLACE 'current_auth_string'
REPLACE
以明文(未加密)字符串指定要替换的帐户当前密码。- 如果需要更改密码以指定当前密码,则必须提供该子句,以验证尝试进行更改的用户实际上知道当前密码。
- 如果帐户的密码更改可以但不必指定当前密码,则该子句是可选的。
- 如果给定了该子句但与当前密码不匹配,即使该子句是可选的,该语句也会失败。
REPLACE
仅在更改当前用户的帐户密码时可以指定。
有关通过指定当前密码进行密码验证的更多信息,请参见“帐户密码管理”。
在
RETAIN CURRENT PASSWORD
和DISCARD OLD PASSWORD
条款实行双重密码功能,并从MySQL 8.0.14的。两者都是可选的,但是如果给定,则具有以下效果:RETAIN CURRENT PASSWORD
保留帐户当前密码作为其辅助密码,以替换任何现有的辅助密码。新密码成为主密码,但是客户端可以使用主密码或辅助密码使用该帐户连接到服务器。(例外:如果ALTER USER
语句指定的新密码为空,则即使提供了辅助密码,二级密码也将变为空RETAIN CURRENT PASSWORD
。)- 如果您指定
RETAIN CURRENT PASSWORD
的主密码为空,则该语句将失败。 - 如果帐户具有辅助密码,并且您在未指定
RETAIN CURRENT PASSWORD
的情况下更改了其主密码,则辅助密码将保持不变。 - 如果更改分配给该帐户的身份验证插件,则辅助密码将被丢弃。如果更改身份验证插件并指定
RETAIN CURRENT PASSWORD
,则该语句将失败。 DISCARD OLD PASSWORD
如果存在辅助密码,则丢弃该辅助密码。该帐户仅保留其主密码,并且客户端只能使用该主密码来使用该帐户连接到服务器。
有关使用双重密码的更多信息,请参见“帐户密码管理”。
ALTER USER
允许以下auth_option
语法:
IDENTIFIED BY 'auth_string'[REPLACE 'current_auth_string'][RETAIN CURRENT PASSWORD]
将帐户身份验证插件设置为默认插件,将明文值传递给该插件以进行可能的散列,并将结果存储在系统表的帐户行中。
'auth_string'
mysql.user
该
REPLACE
子句(如果提供)指定了帐户的当前密码,如本节前面所述。如
RETAIN CURRENT PASSWORD
本节前面所述,该子句(如果给出)将使该帐户的当前密码保留为其辅助密码。IDENTIFIED BY RANDOM PASSWORD[REPLACE 'current_auth_string'][RETAIN CURRENT PASSWORD]
将帐户身份验证插件设置为默认插件,生成一个随机密码,将明文密码值传递给该插件以进行可能的散列,并将结果存储在
mysql.user
系统表的帐户行中。该语句还返回结果集中的明文密码,以使其对执行该语句的用户或应用程序可用。有关结果集和随机生成的密码的特征的详细信息,请参见“随机密码生成”。该
REPLACE
子句(如果提供)指定了帐户的当前密码,如本节前面所述。如
RETAIN CURRENT PASSWORD
本节前面所述,该子句(如果给出)将使该帐户的当前密码保留为其辅助密码。IDENTIFIED WITH auth_plugin
将帐户身份验证插件设置为
auth_plugin
,将凭据清除为空字符串(凭据与旧的身份验证插件相关联,而不是与新的身份验证插件相关联),并将结果存储在mysql.user
系统表的帐户行中。此外,密码标记为已过期。下次连接时,用户必须选择一个新的。
IDENTIFIED WITH auth_plugin BY 'auth_string'[REPLACE 'current_auth_string'][RETAIN CURRENT PASSWORD]
将帐户身份验证插件设置为
auth_plugin
,将明文值传递给该插件以进行可能的散列,并将结果存储在系统表的帐户行中。'auth_string'
mysql.user
该
REPLACE
子句(如果提供)指定了帐户的当前密码,如本节前面所述。如
RETAIN CURRENT PASSWORD
本节前面所述,该子句(如果给出)将使该帐户的当前密码保留为其辅助密码。IDENTIFIED WITH auth_plugin BY RANDOM PASSWORD[REPLACE 'current_auth_string'][RETAIN CURRENT PASSWORD]
将帐户身份验证插件设置为
auth_plugin
,生成一个随机密码,将明文密码值传递给该插件以进行可能的散列,并将结果存储在mysql.user
系统表的帐户行中。该语句还返回结果集中的明文密码,以使其对执行该语句的用户或应用程序可用。有关结果集和随机生成的密码的特征的详细信息,请参见“随机密码生成”。该
REPLACE
子句(如果提供)指定了帐户的当前密码,如本节前面所述。如
RETAIN CURRENT PASSWORD
本节前面所述,该子句(如果给出)将使该帐户的当前密码保留为其辅助密码。IDENTIFIED WITH auth_plugin AS 'auth_string'
将帐户身份验证插件设置为
auth_plugin
并按原样在帐户行中存储值。如果插件需要哈希字符串,则假定该字符串已经以插件所需的格式进行哈希处理。'auth_string'
mysql.user
DISCARD OLD PASSWORD
丢弃该帐户的辅助密码(如果有),如本节前面所述。
示例:将密码指定为明文;使用默认插件:
ALTER USER 'jeffrey'@'localhost'IDENTIFIED BY 'password';
示例:指定身份验证插件以及明文密码值:
ALTER USER 'jeffrey'@'localhost'IDENTIFIED WITH mysql_native_passwordBY 'password';
示例:与前面的示例类似,但此外,请将当前密码指定为明文值,以满足进行更改的用户知道该密码的任何帐户要求:
ALTER USER 'jeffrey'@'localhost'IDENTIFIED WITH mysql_native_passwordBY 'password'REPLACE 'current_password';
除非当前用户被允许,否则前面的语句将失败,jeffrey
因为REPLACE
仅允许更改当前用户的密码。
示例:建立新的主密码并将现有密码保留为辅助密码:
ALTER USER 'jeffrey'@'localhost'IDENTIFIED BY 'new_password'RETAIN CURRENT PASSWORD ;
示例:丢弃辅助密码,只为该帐户保留主密码:
ALTER USER 'jeffery'@'localhost'DISCARD OLD PASSWORD ;
示例:指定身份验证插件以及哈希密码值:
ALTER USER 'jeffrey'@'localhost'IDENTIFIED WITH mysql_native_passwordAS '*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF4';
有关设置密码和身份验证插件的更多信息,请参见“帐户密码管理”和“可插入身份验证”。
ALTER USER角色选项
ALTER USER ... DEFAULT ROLE
定义当用户连接到服务器并进行身份验证时,或者SET ROLE DEFAULT
在会话期间用户执行语句时,哪些角色将变为活动状态。
ALTER USER ... DEFAULT ROLE
是的替代语法SET DEFAULT ROLE
(请参见“ SET DEFAULT ROLE语句”)。但是,ALTER USER
只能为单个用户SET DEFAULT ROLE
设置默认值,而可以为多个用户设置默认值。另一方面,您可以指定CURRENT_USER
该ALTER USER
语句的用户名,而不能指定SET DEFAULT ROLE
。
每个用户帐户名称都使用前面描述的格式。
每个角色名称使用“指定角色名称”中描述的格式。例如:
ALTER USER 'joe'@'10.0.0.1'DEFAULT ROLE administrator, developer;
角色名称的主机名部分(如果省略)默认为'%'
。
DEFAULT ROLE
关键字后面的子句允许这些值:
NONE
:将默认设置为NONE
(无角色)。ALL
:将默认设置设为授予该帐户的所有角色。role[,role] ...
:将默认角色设置为命名角色,该角色必须存在并在执行时授予该帐户ALTER USER ... DEFAULT ROLE
。
ALTER USER SSL / TLS选项
除了基于用户名和凭据的常规身份验证之外,MySQL还可以检查X.509证书属性。有关在MySQL上使用SSL / TLS的背景信息,请参见“使用加密的连接”。
要为MySQL帐户指定与SSL / TLS相关的选项,请使用REQUIRE
指定一个或多个tls_option
值的子句。
REQUIRE
选项的顺序无关紧要,但是不能两次指定选项。该AND
关键字是可选之间REQUIRE
选择。
ALTER USER
允许这些tls_option
值:
NONE
表示该语句命名的所有帐户都没有SSL或X.509要求。如果用户名和密码有效,则允许未加密的连接。如果客户端具有正确的证书和密钥文件,则可以选择使用加密连接。
ALTER USER 'jeffrey'@'localhost'REQUIRE NONE ;默认情况下,客户端尝试建立安全连接。对于具有的客户端,
REQUIRE NONE
如果无法建立安全连接,则连接尝试将退回到未加密的连接。要要求加密连接,客户端只需要指定--ssl-mode=REQUIRED
选项即可;如果无法建立安全连接,则连接尝试将失败。SSL
告诉服务器仅允许该语句命名的所有帐户的加密连接。
ALTER USER 'jeffrey'@'localhost'REQUIRE SSL ;默认情况下,客户端尝试建立安全连接。对于具有的帐户,
REQUIRE SSL
如果无法建立安全连接,则连接尝试将失败。X509
对于该语句命名的所有帐户,要求客户提供有效的证书,但是确切的证书,颁发者和主题无关紧要。唯一的要求是,应该可以使用其中一个CA证书来验证其签名。X.509证书的使用总是暗含加密,因此
SSL
在这种情况下,此选项是不必要的。ALTER USER 'jeffrey'@'localhost'REQUIRE X509 ;对于具有的帐户
REQUIRE X509
,客户必须指定--ssl-key
和--ssl-cert
选项进行连接。(建议但不要求--ssl-ca
也进行指定,以便可以验证服务器提供的公共证书。)这对ISSUER
且也是如此,SUBJECT
因为这些REQUIRE
选项暗示了的要求X509
。ISSUER 'issuer'
对于该语句命名的所有帐户,要求客户端出示由CA颁发的有效X.509证书。如果客户端出示的证书有效但具有不同的颁发者,则服务器将拒绝连接。X.509证书的使用总是暗含加密,因此在这种情况下,此选项是不必要的。
'issuer'
SSL
ALTER USER 'jeffrey'@'localhost'REQUIRE ISSUER '/C=SE/ST=Stockholm/L=Stockholm/ O=MySQL/CN=CA/emailAddress=ca@example.com';因为
ISSUER
暗示的要求X509
,客户端必须指定--ssl-key
和--ssl-cert
选项进行连接。(建议但不要求--ssl-ca
也进行指定,以便可以验证服务器提供的公共证书。)SUBJECT 'subject'
对于该语句命名的所有帐户,要求客户端出示包含主题的有效X.509证书
subject
。如果客户端出示的证书有效但主题不同,则服务器拒绝连接。X.509证书的使用总是暗含加密,因此SSL
在这种情况下,此选项是不必要的。ALTER USER 'jeffrey'@'localhost'REQUIRE SUBJECT '/C=SE/ST=Stockholm/L=Stockholm/ O=MySQL demo client certificate/ CN=client/emailAddress=client@example.com';MySQL 对值与证书中的值进行了简单的字符串比较,因此字母和组件的顺序必须完全按照证书中的顺序给出。
'subject'
因为
SUBJECT
暗示的要求X509
,客户端必须指定--ssl-key
和--ssl-cert
选项进行连接。(建议但不要求--ssl-ca
也进行指定,以便可以验证服务器提供的公共证书。)CIPHER 'cipher'
对于该语句命名的所有帐户,都需要使用特定的加密方法来加密连接。需要使用此选项以确保使用足够强度的密码和密钥长度。如果使用使用短加密密钥的旧算法,则加密可能会很弱。
ALTER USER 'jeffrey'@'localhost'REQUIRE CIPHER 'EDH-RSA-DES-CBC3-SHA';
SUBJECT
,ISSUER
和CIPHER
选项可以在组合中的REQUIRE
条款:
ALTER USER 'jeffrey'@'localhost'REQUIRE SUBJECT '/C=SE/ST=Stockholm/L=Stockholm/ O=MySQL demo client certificate/ CN=client/emailAddress=client@example.com' ANDISSUER '/C=SE/ST=Stockholm/L=Stockholm/ O=MySQL/CN=CA/emailAddress=ca@example.com' ANDCIPHER 'EDH-RSA-DES-CBC3-SHA';
ALTER USER资源限制选项
如“设置帐户资源限制”中所述,可以限制帐户对服务器资源的使用。为此,请使用WITH
指定一个或多个resource_option
值的子句。
WITH
选项的顺序无关紧要,除非多次指定给定的资源限制,最后一个实例优先。
ALTER USER
允许这些resource_option
值:
MAX_QUERIES_PER_HOUR count
,,MAX_UPDATES_PER_HOUR count
MAX_CONNECTIONS_PER_HOUR count
对于该语句命名的所有帐户,这些选项限制了在任何给定的一小时内允许每个帐户进行多少次查询,更新和与服务器的连接。如果
count
为0
(默认值),则表示该帐户没有限制。MAX_USER_CONNECTIONS count
对于该语句命名的所有帐户,限制每个帐户同时连接到服务器的最大数量。非零
count
显式指定帐户的限制。如果count
为0
(默认值),则服务器根据max_user_connections
系统变量的全局值确定该帐户的并发连接数。如果max_user_connections
也为零,则该帐户没有限制。
例:
ALTER USER 'jeffrey'@'localhost'WITH MAX_QUERIES_PER_HOUR 500MAX_UPDATES_PER_HOUR 100;
ALTER USER密码管理选项
ALTER USER
支持多个password_option
密码管理值:
- 密码到期选项:您可以手动使帐户密码到期并建立其密码到期策略。策略选项不会使密码失效。取而代之的是,他们根据密码使用期限来确定服务器如何将自动过期时间应用于该帐户,密码使用期限是根据最近一次帐户密码更改的日期和时间来评估的。
- 密码重用选项:您可以基于密码更改次数,经过时间或两者兼而有之来限制密码重用。
- 需要密码验证的选项:您可以指示更改帐户密码的尝试是否必须指定当前密码,以验证尝试进行更改的用户实际上是否知道当前密码。
- 错误密码失败登录跟踪选项:您可以使服务器跟踪失败的登录尝试并暂时锁定为其提供过多连续不正确密码的帐户。所需的失败次数和锁定时间是可配置的。
本节介绍密码管理选项的语法。有关建立密码管理策略的信息,请参见“帐户密码管理”。
如果指定了给定类型的多个密码管理选项,则最后一个优先。例如,PASSWORD EXPIRE DEFAULT PASSWORD EXPIRE NEVER
与相同PASSWORD EXPIRE NEVER
。
注意除与失败登录跟踪有关的选项外,密码管理选项仅适用于使用身份验证插件的帐户,该身份验证插件将凭据存储在内部。对于使用插件执行针对MySQL外部凭据系统进行身份验证的插件的帐户,密码管理也必须针对该系统从外部进行处理。有关内部凭据存储的更多信息,请参见“帐户密码管理”。
如果帐户密码已手动过期,或者根据自动过期策略,密码年龄被认为大于其允许的生存期,则客户端的密码已过期。在这种情况下,服务器要么断开客户端的连接,要么限制其允许的操作(请参见“服务器处理过期的密码”)。受限制的客户端执行的操作会导致错误,直到用户建立新的帐户密码为止。
注意尽管可以通过将过期的密码设置为当前值来“重置”它,但出于良好的政策考虑,最好选择其他密码。DBA可以通过建立适当的密码重用策略来强制不重用。请参阅密码重用策略。
ALTER USER
允许使用以下password_option
值来控制密码的到期时间:
PASSWORD EXPIRE
立即将该语句命名的所有帐户的密码标记为过期。
ALTER USER 'jeffrey'@'localhost'PASSWORD EXPIRE ;PASSWORD EXPIRE DEFAULT
设置该语句命名的所有帐户,以便应用
default_password_lifetime
系统策略指定的全局到期策略。ALTER USER 'jeffrey'@'localhost'PASSWORD EXPIRE DEFAULT ;PASSWORD EXPIRE NEVER
此到期选项将覆盖该语句命名的所有帐户的全局策略。对于每个密码,它都会禁用密码过期,以使密码永不过期。
ALTER USER 'jeffrey'@'localhost'PASSWORD EXPIRE NEVER ;PASSWORD EXPIRE INTERVAL N DAY
此到期选项将覆盖该语句命名的所有帐户的全局策略。对于每个密码,它将密码有效期设置为
N
几天。以下声明要求每180天更改一次密码:ALTER USER 'jeffrey'@'localhost'PASSWORD EXPIRE INTERVAL 180 DAY;
ALTER USER
允许这些password_option
值用于根据所需的最小密码更改次数控制先前密码的重用:
PASSWORD HISTORY DEFAULT
设置该语句命名的所有帐户,以便应用有关密码历史记录长度的全局策略,以禁止在
password_history
系统变量指定的更改次数之前重复使用密码。ALTER USER 'jeffrey'@'localhost'PASSWORD HISTORY DEFAULT ;PASSWORD HISTORY N
此历史记录长度选项将覆盖该语句命名的所有帐户的全局策略。对于每个密码,它将密码历史记录长度设置为
N
密码,以禁止重复使用任何N
最近选择的密码。以下语句禁止重用之前的6个密码:ALTER USER 'jeffrey'@'localhost'PASSWORD HISTORY 6;
ALTER USER
允许这些password_option
值用于根据经过的时间来控制先前密码的重用:
PASSWORD REUSE INTERVAL DEFAULT
设置该帐户命名的所有语句,以便应用有关经过时间的全局策略,以禁止重复使用比
password_reuse_interval
系统变量指定的天数新的密码。ALTER USER 'jeffrey'@'localhost'PASSWORD REUSE INTERVAL DEFAULT ;PASSWORD REUSE INTERVAL N DAY
这个经过时间的选项会覆盖该语句命名的所有帐户的全局策略。对于每个密码,它将密码重用间隔设置为
N
几天,以禁止重用比该天数新的密码。以下语句禁止360天重复使用密码:ALTER USER 'jeffrey'@'localhost'PASSWORD REUSE INTERVAL 360 DAY;
ALTER USER
允许使用这些password_option
值来控制尝试更改帐户密码是否必须指定当前密码,以验证尝试进行更改的用户实际上是否知道当前密码:
PASSWORD REQUIRE CURRENT
该验证选项将覆盖该语句命名的所有帐户的全局策略。对于每个密码,要求更改密码指定当前密码。
ALTER USER 'jeffrey'@'localhost'PASSWORD REQUIRE CURRENT ;PASSWORD REQUIRE CURRENT OPTIONAL
该验证选项将覆盖该语句命名的所有帐户的全局策略。对于每个密码,不需要更改密码即可指定当前密码。(可以但不必提供当前密码。)
ALTER USER 'jeffrey'@'localhost'PASSWORD REQUIRE CURRENT OPTIONAL ;PASSWORD REQUIRE CURRENT DEFAULT
设置该帐户命名的所有语句,以便应用
password_require_current
系统密码指定的有关密码验证的全局策略。ALTER USER 'jeffrey'@'localhost'PASSWORD REQUIRE CURRENT DEFAULT ;
从MySQL 8.0.19开始,ALTER USER
允许使用以下password_option
值来控制登录失败跟踪:
FAILED_LOGIN_ATTEMPTS N
是否跟踪指定错误密码的帐户登录尝试。
N
必须为0到32767之间的数字。0值将禁用登录失败跟踪。大于0的值表示有多少连续密码失败导致临时帐户锁定(如果PASSWORD_LOCK_TIME
也是非零的话)。PASSWORD_LOCK_TIME{N| UNBOUNDED}
连续多次登录尝试后锁定帐户多长时间提供了错误的密码。
N
必须是0到32767之间的数字,或者UNBOUNDED
。值为0将禁用临时帐户锁定。大于0的值表示锁定帐户的天数。值UNBOUNDED
导致帐户锁定期限不受限制;一旦锁定,该帐户将保持锁定状态,直到被解锁。有关发生解锁条件的信息,请参阅“失败登录跟踪和临时帐户锁定”。
为了进行失败的登录跟踪和临时锁定,帐户FAILED_LOGIN_ATTEMPTS
和PASSWORD_LOCK_TIME
选项都必须为非零。以下语句修改了一个帐户,使其在连续四次密码失败后仍保持锁定状态两天:
ALTER USER 'jeffrey'@'localhost'FAILED_LOGIN_ATTEMPTS 4PASSWORD_LOCK_TIME 2;
ALTER USER帐户锁定选项
MySQL支持使用ACCOUNT LOCK
和ACCOUNT UNLOCK
选项锁定和解锁帐户,该选项指定帐户的锁定状态。有关更多讨论,请参见“帐户锁定”。
如果指定了多个帐户锁定选项,则最后一个优先。
从MySQL 8.0.19开始,ALTER USER ... UNLOCK
解锁由由于过多失败登录而被暂时锁定的语句命名的任何帐户。请参见“帐户密码管理”。
ALTER USER二进制记录
ALTER USER
如果成功则写入二进制日志,但如果失败则不写入二进制日志;在这种情况下,将发生回滚并且不进行任何更改。写入二进制日志的语句包括所有命名的用户。如果IF EXISTS
给出该子句,则甚至包括不存在且未更改的用户。
如果原始语句更改了用户的凭据,则写入二进制日志的语句将为该用户指定适用的身份验证插件,确定方式如下:
- 如果指定了原始语句中命名的插件。
- 否则,如果用户存在,则与用户帐户关联的插件,如果用户不存在,则为默认身份验证插件。(如果写入二进制日志的语句必须为用户指定特定的身份验证插件,则将其包括在原始语句中。)
如果服务器在写入二进制日志的语句中为所有用户添加了默认身份验证插件,则会向错误日志中写入警告以命名这些用户。
如果原始语句指定了FAILED_LOGIN_ATTEMPTS
or PASSWORD_LOCK_TIME
选项,则写入二进制日志的语句将包含该选项。