10bet网址
MySQL 8.0参考手册
相关的文档10bet官方网站 本手册下载 本手册节选

13.7.1.1 ALTER USER语句

Alter user [if exists]用户auth_option] [,用户auth_option]]…(需要{|tls_option[[和]tls_option]…}] [与resource_optionresource_option)……] [password_option|lock_option)……(评论comment_string' |属性'json_objectalter user [if exists] user ()user_func_auth_optionAlter user [if exists]用户默认角色{无|所有|角色[,角色]…}用户:(参见第6.2.4节,“指定帐户名称”)auth_option:{以'标识auth_string“[替换”current_auth_string[保留当前密码]|被随机密码识别[替换]current_auth_string'][保留当前密码]|标识为auth_plugin|认同auth_plugin由“auth_string“[替换”current_auth_string'][保留当前密码]|标识为auth_plugin通过随机密码[替换'current_auth_string'][保留当前密码]|标识为auth_plugin为“auth_string' |丢弃旧密码}user_func_auth_option:{以'标识auth_string“[替换”current_auth_string'][保留当前密码]|丢弃旧密码}tls_option: {SSL | x509 | cipher '密码' |发行人'发行人' | subject '主题'}resource_option: {MAX_QUERIES_PER_HOUR| MAX_UPDATES_PER_HOUR| MAX_CONNECTIONS_PER_HOUR| MAX_USER_CONNECTIONSpassword_option:{密码过期[default | never | interval]N天]|密码历史{默认|N} |密码重用间隔时间{默认|NDay} | password require current [default | optional] | failed_login_attempts .日志含义N| PASSWORD_LOCK_TIME {N|无限}}lock_option:{帐号锁定|帐号解锁}

改变用户语句修改MySQL帐户。它允许为现有帐户修改身份验证、角色、SSL/TLS、资源限制和密码管理属性。它还可以用于锁定和解锁帐户。

在大多数情况下,改变用户需要全球创建用户特权,或更新特权的mysql系统模式。异常:

  • 任何使用非匿名帐户连接到服务器的客户机都可以更改该帐户的密码。(特别是,你可以修改自己的密码。)要查看服务器验证您为哪个帐户,请调用CURRENT_USER ()功能:

    选择CURRENT_USER ();
  • 默认角色语法,改变用户需要这些权限:

    • 为其他用户设置默认角色需要使用全局变量创建用户特权,或更新特权的mysql.default_roles系统表。

    • 为自己设置默认角色不需要任何特权,只要将您想要的默认角色授予您即可。

  • 修改次要密码的语句需要以下特权:

read_only系统变量已启用,改变用户另外需要CONNECTION_ADMIN特权(或已弃用的超级特权)。

默认情况下,如果您试图修改一个不存在的用户,将会出现错误。如果如果存在子句时,语句会为每个不存在的指定用户生成一个警告,而不是一个错误。

重要的

在某些情况下,改变用户可能记录在服务器日志中或在客户端历史文件中,例如~ / .mysql_history,这意味着任何拥有读取权限的人都可能读取明文密码。有关服务器日志发生此情况的条件以及如何控制它的信息,请参见章节6.1.2.3,“密码和日志记录”.有关客户端日志记录的类似信息,请参见第4.5.1.3节,“mysql客户端日志”

有几个方面改变用户声明,在以下主题下描述:

改变用户概述

对于每个受影响的帐户,改变用户中相应的行mysql.user系统表,以反映语句中指定的属性。未指定的属性保留其当前值。

每个帐户名称使用中描述的格式第6.2.4节,“指定帐户名称”.如果省略帐户名的主机名部分,默认为“%”.也可以指定CURRENT_USERCURRENT_USER ()引用与当前会话关联的帐户。

对于一种语法,可以使用用户()功能:

修改用户user ()auth_string”;

该语法允许更改您自己的密码,而无需按字面意思命名您的帐户。(语法也支持取代保留当前的密码,丢弃旧密码条款描述ALTER USER身份验证选项.)

MySQL 8.0.21及以后版本支持用户注释和用户属性,如第13.7.1.3节,"创建用户语句".这些可以被修改使用改变用户通过评论而且属性选项,分别。不能同时指定这两个选项改变用户声明;尝试这样做会导致语法错误。

用户注释和用户属性存储在INFORMATION_SCHEMA。USER_ATTRIBUTES表作为JSON对象;用户注释被存储为a的值评论键,如本讨论后面所示。的评论文本可以是任意引用的文本,并替换任何现有的用户评论。的属性value必须是JSON对象的有效字符串表示形式。与任何现有用户属性合并,就像JSON_MERGE_PATCH ()函数已用于现有的用户属性和新的用户属性;对于任何被重用的键,新值会覆盖旧值,如下所示:

mysql>从INFORMATION_SCHEMA中选择USER_ATTRIBUTES-> WHERE USER='bill' AND HOST='localhost'; +------+-----------+----------------+ | USER | HOST | ATTRIBUTE | +------+-----------+----------------+ | bill | localhost | {"foo": "bar"} | +------+-----------+----------------+ 1 row in set (0.11 sec) mysql> ALTER USER 'bill'@'localhost' ATTRIBUTE '{"baz": "faz", "foo": "moo"}'; Query OK, 0 rows affected (0.22 sec) mysql> SELECT * FROM INFORMATION_SCHEMA.USER_ATTRIBUTES -> WHERE USER='bill' AND HOST='localhost'; +------+-----------+------------------------------+ | USER | HOST | ATTRIBUTE | +------+-----------+------------------------------+ | bill | localhost | {"baz": "faz", "foo": "moo"} | +------+-----------+------------------------------+ 1 row in set (0.00 sec)

要从用户属性中删除一个键及其值,请将键设置为JSON(必须小写且不加引号),像这样:

mysql> ALTER USER 'bill'@'localhost' ATTRIBUTE '{"foo": null}';mysql> SELECT * FROM INFORMATION_SCHEMA。USER_ATTRIBUTES -> WHERE USER='bill' AND HOST='localhost';+------+-----------+----------------+ | 主机用户| |属性  | +------+-----------+----------------+ | 比尔| localhost |{“巴兹”:“《法兰克福汇报》 "} | +------+-----------+----------------+ 1行集(0.00秒)

要将现有用户注释设置为空字符串,请使用改变用户……评论”.这就留下了一个空评论的价值USER_ATTRIBUTES表;要完全删除用户评论,请使用改变用户……属性……将列键的值设置为JSON(未引用,小写)。下面的SQL语句序列说明了这一点:

mysql> ALTER USER 'bill'@'localhost' COMMENT '关于bill的信息';mysql> SELECT * FROM INFORMATION_SCHEMA。USER_ATTRIBUTES -> WHERE USER='bill' AND HOST='localhost';+------+-----------+---------------------------------------------------+ | 主机用户| |属性  | +------+-----------+---------------------------------------------------+ | 比尔| localhost |{“巴兹”:“报道”、“评论”:“比尔 "} | +------+-----------+---------------------------------------------------+ 1行组(0.00秒)mysql >改变用户“比尔”@“localhost”评论”;mysql> SELECT * FROM INFORMATION_SCHEMA。USER_ATTRIBUTES -> WHERE USER='bill' AND HOST='localhost';+------+-----------+-------------------------------+ | 主机用户| |属性  | +------+-----------+-------------------------------+ | 比尔| localhost |{“巴兹”:“报道”、“发表评论 ": ""} | +------+-----------+-------------------------------+ 1行组(0.00秒)mysql >改变用户“比尔”@“localhost”属性“{零}“评论”:”;mysql> SELECT * FROM INFORMATION_SCHEMA。USER_ATTRIBUTES -> WHERE USER='bill' AND HOST='localhost';+------+-----------+----------------+ | 主机用户| |属性  | +------+-----------+----------------+ | 比尔| localhost |{“巴兹”:“《法兰克福汇报》 "} | +------+-----------+----------------+ 1行集(0.00秒)

改变用户语法允许auth_option值遵循用户值,auth_option指示帐户如何通过指定帐户身份验证插件、凭据(例如,密码)或两者同时进行身份验证。每一个auth_option应用价值只有转到它前面的账户。

后,用户规范中,该语句可能包括SSL/TLS、资源限制、密码管理和锁定属性的选项。所有这些选项都是全球对声明和应用于所有报表中列出的账户。

例如:修改帐户密码并使其过期。因此,用户必须使用命名密码连接,并在下一次连接时选择一个新的密码:

ALTER USER 'jeffrey'@'localhost' IDENTIFIED BY 'new_password的密码到期;

示例:修改帐户为使用caching_sha2_password身份验证插件和给定的密码。要求每180天选择一个新密码,并启用失败登录跟踪,这样连续三个错误密码会导致帐户临时锁定两天:

ALTER USER 'jeffrey'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'new_password密码过期时间间隔180天

例如:锁定/解锁帐号。

ALTER USER 'jeffrey'@'localhost' ACCOUNT LOCK解锁localhost帐号

示例:要求一个帐户使用SSL连接,并建立每小时20个连接的限制:

ALTER USER 'jeffrey'@'localhost'要求SSL与MAX_CONNECTIONS_PER_HOUR 20;

示例:修改多个帐户,指定一些每个帐户的属性和一些全局属性:

ALTER USER 'jeffrey'@'localhost' IDENTIFIED BY 'jeffrey_new_password', 'jeanne'@'localhost', 'josh'@'localhost' IDENTIFIED BY 'josh_new_password“替换”josh_current_password保留当前密码需要SSL与max_user_connections的密码历史5;

确认的值后杰弗里只适用于它前面的帐户,因此它将密码更改为jeffrey_new_password只对杰弗里.为珍妮,没有每个帐户的值(因此保持密码不变)。为杰克确认的设置新密码(josh_new_password),取代,以验证用户发出改变用户语句知道当前密码(josh_current_password),当前密码也保留为帐户从密码。(作为一个结果,杰克可以连接主密码或从密码。)

其余属性全局应用于语句中命名的所有帐户,因此对于两个帐户:

  • 使用SSL需要连接。

  • 该帐户最多可同时使用两个连接。

  • 密码更改不能重复使用最近5个密码中的任何一个。

示例:丢弃的从密码杰克,只保留主密码:

修改用户josh @ localhost旧密码

由于没有特定类型的选择,帐户在这方面保持不变。例如,如果没有锁定选项,则不会改变帐户的锁定状态。

ALTER USER身份验证选项

帐户名称后面可以跟一个auth_option身份验证选项,指定帐户身份验证插件、凭据或两者都有。它还可以包括一个密码验证子句,用于指定要替换的帐户当前密码,以及管理帐户是否具有次要密码的子句。

请注意

随机密码生成、密码验证和辅助密码的子句只适用于那些使用在MySQL内部存储凭证的身份验证插件的帐户。对于使用插件对MySQL外部的凭证系统执行身份验证的帐户,密码管理也必须在外部对该系统进行处理。有关内部凭据存储的详细信息,请参见第6.2.15节,“密码管理”

  • auth_plugin命名一个认证插件。插件名可以是带引号的字符串字面值,也可以是不带引号的名称。插件名称存储在插件列的mysql.user系统表。

    auth_option的值表示默认插件default_authentication_plugin系统变量。关于每个插件的描述,请参见第6.4.1节,“认证插件”

  • 存储在内部的凭据存储在mysql.user系统表。一个auth_string值或随机密码指定帐户凭证,可以是明文(未加密)字符串,也可以是与帐户相关联的认证插件所期望的格式,分别为:

    • 对于使用由“auth_string,该字符串是明文的,并被传递给身份验证插件以进行可能的散列。插件返回的结果存储在mysql.user表格插件可以使用指定的值,在这种情况下不会发生哈希。

    • 对于使用通过随机密码, MySQL生成一个随机的明文密码,并将其传递给身份验证插件,以便进行可能的哈希。插件返回的结果存储在mysql.user表格插件可以使用指定的值,在这种情况下不会发生哈希。

      从MySQL 8.0.18开始就可以使用随机生成的密码,并具有中描述的特征生成随机密码

    • 对于使用为“auth_string,则假定该字符串已经是身份验证插件所需的格式,并按mysql.user表格如果一个插件需要一个散列值,这个值必须已经以适合插件的格式散列了;否则,该值不能被插件使用,并且不会发生正确的客户端连接认证。

      从MySQL 8.0.17开始,散列字符串可以是字符串字面值,也可以是十六进制值。后者对应于显示的值的类型显示创建用户时包含不可打印字符的密码散列print_identified_with_as_hex启用系统变量。

    • 如果身份验证插件不对身份验证字符串进行哈希处理,则由“auth_string而且为“auth_string子句具有相同的效果:身份验证字符串存储在mysql.user系统表。

  • 取代的current_auth_string子句执行密码验证,在MySQL 8.0.13版本中可用。如果给定:

    • 取代指定要替换的帐户当前密码,为明文(未加密)字符串。

    • 如果需要修改密码来指定当前密码,则必须给出子句,以验证试图进行修改的用户实际上知道当前密码。

    • 如果帐户的密码更改可能但不需要指定当前密码,则子句是可选的。

    • 如果给出了子句,但不匹配当前密码,则语句将失败,即使子句是可选的。

    • 取代仅当修改当前用户的帐号密码时可以设置。

    有关通过指定当前密码进行密码验证的详细信息,请参见第6.2.15节,“密码管理”

  • 保留当前的密码而且丢弃旧密码条款实现双密码功能,并在MySQL 8.0.14可用。两者都是可选的,但如果给定,则会产生以下效果:

    • 保留当前的密码保留帐户当前密码作为辅助密码,替换任何现有的辅助密码。新密码将成为主密码,但是客户端可以使用该帐户使用主密码或辅助密码连接到服务器。(例外:如果指定的新密码改变用户语句为空,则辅助密码也将为空,即使保留当前的密码给出)。

    • 如果您指定保留当前的密码对于主密码为空的帐户,该语句将失败。

    • 如果帐户有从密码,修改主密码时不指定保留当前的密码,则二级密码保持不变。

    • 如果修改了分配给该帐户的认证插件,从密码将被丢弃。如果您更改身份验证插件并指定保留当前的密码,语句失败。

    • 丢弃旧密码如果二级密码存在,则丢弃二级密码。该帐户只保留其主密码,客户端可以使用该帐户仅使用主密码连接到服务器。

    有关使用双重密码的详细信息,请参见第6.2.15节,“密码管理”

改变用户允许这些auth_option语法:

  • 被“auth_string“[替换”current_auth_string'][保留当前密码]

    将帐户身份验证插件设置为默认插件,并传递明文auth_string,并将结果存储在帐户行中mysql.user系统表。

    取代子句指定帐户当前密码,如本节前面所述。

    保留当前的密码子句,如果给出,将导致帐户当前密码保留为次要密码,如本节前面所述。

  • 由随机密码识别[替换'current_auth_string'][保留当前密码]

    将帐户身份验证插件设置为默认插件,生成一个随机密码,将明文密码值传递给插件以进行可能的散列,并将结果存储在帐户行中mysql.user系统表。该语句还返回结果集中的明文密码,以便执行该语句的用户或应用程序可以使用该密码。随机生成密码的结果集和特征请参见生成随机密码

    取代子句指定帐户当前密码,如本节前面所述。

    保留当前的密码子句,如果给出,将导致帐户当前密码保留为次要密码,如本节前面所述。

  • 认同auth_plugin

    设置帐户身份验证插件为auth_plugin,将凭据清除为空字符串(凭据与旧的身份验证插件相关联,而不是新的),并将结果存储在帐户行中mysql.user系统表。

    另外,密码被标记为过期。用户下次连接时必须选择一个新的。

  • 认同auth_plugin由“auth_string“[替换”current_auth_string'][保留当前密码]

    设置帐户身份验证插件为auth_plugin,传递明文auth_string,并将结果存储在帐户行中mysql.user系统表。

    取代子句指定帐户当前密码,如本节前面所述。

    保留当前的密码子句,如果给出,将导致帐户当前密码保留为次要密码,如本节前面所述。

  • 认同auth_plugin通过随机密码[替换'current_auth_string'][保留当前密码]

    设置帐户身份验证插件为auth_plugin,生成一个随机密码,将明文密码值传递给插件以进行可能的散列,并将结果存储在帐户行中mysql.user系统表。该语句还返回结果集中的明文密码,以便执行该语句的用户或应用程序可以使用该密码。随机生成密码的结果集和特征请参见生成随机密码

    取代子句指定帐户当前密码,如本节前面所述。

    保留当前的密码子句,如果给出,将导致帐户当前密码保留为次要密码,如本节前面所述。

  • 认同auth_plugin为“auth_string

    设置帐户身份验证插件为auth_plugin并存储auth_string的值mysql.user账户行。如果插件需要一个散列字符串,则假定该字符串已经按照插件需要的格式散列了。

  • 丢弃旧密码

    如本节所述,如果有帐户从密码,则丢弃该帐户从密码。

例如:指定密码为明文;使用默认插件:

ALTER USER 'jeffrey'@'localhost' IDENTIFIED BY '密码”;

示例:指定身份验证插件,以及明文密码值:

ALTER USER 'jeffrey'@'localhost' IDENTIFIED WITH mysql_native_password BY '密码”;

示例:与前面的示例类似,但除此之外,还需要将当前密码指定为一个明文值,以满足进行更改的用户知道该密码的任何帐户要求:

ALTER USER 'jeffrey'@'localhost' IDENTIFIED WITH mysql_native_password BY '密码“替换”current_password”;

除非当前用户是,否则上述语句将失败杰弗里因为取代只允许修改当前用户的密码。

[示例]设置新的主密码,并保留原有的从密码。

ALTER USER 'jeffrey'@'localhost' IDENTIFIED BY 'new_password'保留当前密码;

示例:放弃从密码,只保留主密码。

修改用户“jeffery”的旧密码

示例:指定身份验证插件,以及一个散列密码值:

ALTER USER 'jeffrey'@'localhost' IDENTIFIED WITH mysql_native_password AS '*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF4';

有关设置密码和身份验证插件的更多信息,请参见第6.2.14节,“分配帐户密码”,第6.2.17节,“可插入身份验证”

修改用户角色选项

改变用户……默认角色定义当用户连接到服务器并进行身份验证时,或当用户执行设置角色默认会话期间的声明。

改变用户……默认角色的替代语法设置默认角色(见第13.7.1.9节,"设置默认角色语句").然而,改变用户可以为单个用户设置默认值,然而设置默认角色可以为多个用户设置默认值。另一方面,您可以指定CURRENT_USER的用户名改变用户陈述,而你不能为设置默认角色

每个用户帐户名称使用前面描述的格式。

每个角色名称使用中描述的格式第6.2.5节,“指定角色名”.例如:

ALTER USER 'joe'@'10.0.0.1' DEFAULT ROLE administrator, developer;

如果省略角色名的主机名部分,默认为“%”

后面的从句默认角色关键字允许以下值:

  • 没有一个:默认为没有一个(没有角色)。

  • 所有:默认为该帐号所拥有的所有角色。

  • 角色[,角色)……:默认设置为命名角色,该角色必须存在,并在当时授予该帐户改变用户……默认角色是执行。

修改用户SSL/TLS选项

除了通常的基于用户名和凭证的身份验证之外,MySQL还可以检查X.509证书属性。关于MySQL使用SSL/TLS的背景信息,请参见第6.3节,“使用加密连接”

要为MySQL帐户指定SSL/ tls相关选项,请使用需要子句,指定一个或多个tls_option值。

的顺序需要选项无关紧要,但是不能指定两次选项。的关键字是可选的需要选项。

改变用户允许这些tls_option价值观:

  • 没有一个

    指示由该语句命名的所有帐户都没有SSL或X.509要求。如果用户名和密码有效,则允许不加密连接。如果客户机有适当的证书和密钥文件,则可以根据客户机的选择使用加密连接。

    ALTER USER 'jeffrey'@'localhost' REQUIRE NONE;

    默认情况下,客户端会尝试建立安全连接。对于那些不需要进行,如果无法建立安全连接,则连接尝试会退回到未加密连接。要要求加密连接,客户端只需要指定——ssl-mode =要求选择;如果无法建立安全连接,则连接尝试失败。

  • SSL

    告诉服务器仅允许该语句命名的所有帐户的加密连接。

    ALTER USER 'jeffrey'@'localhost'请求SSL;

    默认情况下,客户端会尝试建立安全连接。对于拥有需要SSL,如果无法建立安全连接,则连接尝试失败。

  • X509

    对于由该语句命名的所有帐户,要求客户端提供有效的证书,但确切的证书、颁发者和主题并不重要。唯一的要求是,应该能够使用一个CA证书来验证其签名。使用X.509证书总是意味着加密,因此SSL选项在这种情况下是不必要的。

    ALTER USER 'jeffrey'@'localhost' REQUIRE X509;

    的账户需要X509,客户端必须指定——ssl密钥而且——ssl-cert连接选项。(这是推荐的,但不是必需的——ssl-ca也可以指定,以便验证服务器提供的公共证书。)这对发行人而且主题也因为那些需要选项意味着的需求X509

  • 发行人的发行人

    对于由该语句命名的所有帐户,要求客户端提供CA颁发的有效X.509证书发行人.如果客户端提供的证书是有效的,但颁发者不同,服务器将拒绝该连接。使用X.509证书总是意味着加密,因此SSL选项在这种情况下是不必要的。

    ALTER USER 'jeffrey'@'localhost' REQUIRE ISSUER '/C=SE/ST=Stockholm/L=Stockholm/ O=MySQL/CN=CA/emailAddress=ca@example.com';

    因为发行人隐含了X509,客户端必须指定——ssl密钥而且——ssl-cert连接选项。(这是推荐的,但不是必需的——ssl-ca也可以指定,以便验证服务器提供的公共证书。)

  • 主题的主题

    对于由语句命名的所有帐户,要求客户端提供包含主题的有效X.509证书主题.如果客户端提供的证书是有效的,但具有不同的主题,服务器将拒绝连接。使用X.509证书总是意味着加密,因此SSL选项在这种情况下是不必要的。

    ALTER USER 'jeffrey'@'localhost' REQUIRE SUBJECT '/C=SE/ST=Stockholm/L=Stockholm/ O=MySQL demo客户端证书/ CN=client/emailAddress=client@example.com';

    MySQL做一个简单的字符串比较主题值为证书中的值,因此字母大小写和组件顺序必须与证书中呈现的完全相同。

    因为主题隐含了X509,客户端必须指定——ssl密钥而且——ssl-cert连接选项。(这是推荐的,但不是必需的——ssl-ca也可以指定,以便验证服务器提供的公共证书。)

  • 密码的密码

    对于由该语句命名的所有帐户,需要使用特定的密码方法来加密连接。需要这个选项来确保使用足够强度的密码和密钥长度。如果使用使用短加密密钥的旧算法,加密可能很弱。

    ALTER USER 'jeffrey'@'localhost' REQUIRE CIPHER 'EDH-RSA-DES-CBC3-SHA';

主题发行人,密码选项可以组合在需要条款:

ALTER USER 'jeffrey'@'localhost' REQUIRE SUBJECT '/C=SE/ST=Stockholm/L=Stockholm/ O=MySQL demo客户端证书/CN= client/emailAddress=client@example.com' AND ISSUER '/C=SE/ST=Stockholm/L=Stockholm/ O=MySQL/CN=CA/emailAddress=ca@example.com' AND CIPHER 'EDH-RSA-DES-CBC3-SHA';
修改用户资源限制选项

可以对帐户对服务器资源的使用进行限制,如中所述第6.2.20节,“设置帐户资源限制”.要这样做,使用a子句,指定一个或多个resource_option值。

的顺序选项无关紧要,除非多次指定给定的资源限制,最后一个实例优先。

改变用户允许这些resource_option价值观:

  • MAX_QUERIES_PER_HOURMAX_UPDATES_PER_HOURMAX_CONNECTIONS_PER_HOUR

    对于由该语句命名的所有帐户,这些选项限制每个帐户在给定的一小时内允许查询、更新和连接到服务器的次数。如果0(默认),这意味着对帐户没有限制。

  • MAX_USER_CONNECTIONS

    对于由该语句命名的所有帐户,限制每个帐户同时连接到服务器的最大数量。一个非零显式指定帐户的限制。如果0(默认值),服务器从全局值确定该帐户的同时连接数max_user_connections系统变量。如果max_user_connections也是零,对账户没有限制。

例子:

ALTER USER 'jeffrey'@'localhost' WITH MAX_QUERIES_PER_HOUR 500 MAX_UPDATES_PER_HOUR 100;
ALTER USER Password-Management选项

改变用户支持多种password_option密码管理的取值范围:

  • 密码过期选项:可以手动设置帐号密码过期,并建立帐号密码过期策略。策略选项不会使密码过期。相反,它们根据密码年龄确定服务器如何对帐户应用自动过期,密码年龄是从最近更改帐户密码的日期和时间评估的。

  • 密码重用选项:可以根据密码修改的次数、时间流逝或两者兼有来限制密码重用。

  • 需要密码验证的选项:可以指示更改帐户密码的尝试是否必须指定当前密码,以验证试图更改帐户密码的用户是否确实知道当前密码。

  • 错误密码失败登录跟踪选项:您可以使服务器跟踪失败的登录尝试,并临时锁定那些连续给出太多错误密码的帐户。所需的失败次数和锁定时间是可配置的。

介绍密码管理选项的语法。关于建立密码管理策略,请参见第6.2.15节,“密码管理”

如果指定了多个给定类型的密码管理选项,则最后一个选项优先。例如,密码过期默认密码永不过期就等于密码到期不

请注意

除了与登录失败跟踪相关的选项外,密码管理选项只适用于那些使用了在MySQL内部存储凭证的身份验证插件的帐户。对于使用插件对MySQL外部的凭证系统执行身份验证的帐户,密码管理也必须在外部对该系统进行处理。有关内部凭据存储的详细信息,请参见第6.2.15节,“密码管理”

如果帐户密码是手动过期的,或者根据自动过期策略,认为密码年龄大于其允许的生存期,那么客户机就有一个过期的密码。在这种情况下,服务器要么断开客户机的连接,要么限制对它允许的操作(参见第6.2.16节,“过期密码的服务器处理”).受限制客户端执行的操作会导致错误,直到用户建立新的帐户密码。

请注意

虽然这是可能的重置过期密码通过将其设置为当前值,作为一个好的策略,最好选择一个不同的密码。dba可以通过建立适当的密码重用策略来强制不可重用。看到密码重用策略

改变用户允许这些password_option控制密码过期的值:

  • 密码到期

    立即标记由该语句命名的所有帐户的密码过期。

    ALTER USER 'jeffrey'@'localhost' PASSWORD EXPIRE;
  • 密码到期违约

    设置由语句命名的所有帐户,以便应用全局过期策略default_password_lifetime系统变量。

    ALTER USER 'jeffrey'@'localhost' PASSWORD EXPIRE DEFAULT;
  • 密码到期不

    此过期选项将覆盖由该语句命名的所有帐户的全局策略。对于每一个,它禁用密码过期,这样密码永远不会过期。

    ALTER USER 'jeffrey'@'localhost' PASSWORD EXPIRE NEVER;
  • 密码到期时间间隔N一天

    此过期选项将覆盖由该语句命名的所有帐户的全局策略。对于每一个,它将密码生存期设置为N天。以下语句要求密码每180天修改一次:

    ALTER USER 'jeffrey'@'localhost' PASSWORD过期时间180天;

改变用户允许这些password_option根据最低密码修改次数来控制以前密码的重复使用:

  • 密码历史违约

    设置由语句命名的所有帐户,以便应用关于密码历史长度的全局策略,以禁止在指定的更改次数之前重用密码password_history系统变量。

    ALTER USER 'jeffrey'@'localhost' PASSWORD HISTORY DEFAULT;
  • 密码历史N

    这个历史记录长度选项将覆盖由该语句命名的所有帐户的全局策略。对于每个密码,它将密码历史长度设置为N密码,禁止重用任何N最近选择的密码。以下语句禁止重复使用之前的6个密码:

    ALTER USER 'jeffrey'@'localhost' PASSWORD HISTORY

改变用户允许这些password_option根据时间流逝来控制以前的密码的重用值:

  • 缺省密码重复使用时间间隔

    设置由帐户命名的所有语句,以便应用关于时间流逝的全局策略,以禁止重复使用比指定的天数新的密码password_reuse_interval系统变量。

    修改用户密码重用间隔
  • 密码重用间隔N一天

    此耗时选项将覆盖由该语句命名的所有帐户的全局策略。对于每个密码,它将密码重用间隔设置为N天,禁止重复使用比这个时间更新的密码。以下声明禁止密码在360天内重复使用:

    ALTER USER 'jeffrey'@'localhost'密码重用间隔360天;

改变用户允许这些password_option用于控制尝试更改帐户密码是否必须指定当前密码的值,以验证试图更改帐户密码的用户实际上知道当前密码:

  • 密码需要电流

    此验证选项将覆盖由该语句命名的所有帐户的全局策略。对于每个密码,它要求修改密码时指定当前密码。

    ALTER USER 'jeffrey'@'localhost' PASSWORD要求当前密码
  • 密码要求当前可选

    此验证选项将覆盖由该语句命名的所有帐户的全局策略。对于每一个,它不要求修改密码时指定当前密码。(可以输入当前密码,但不需要输入。)

    ALTER USER 'jeffrey'@'localhost' PASSWORD required CURRENT OPTIONAL;
  • 密码要求当前默认

    设置由帐户命名的所有语句,以便应用关于密码验证的全局策略password_require_current系统变量。

    ALTER USER 'jeffrey'@'localhost' PASSWORD要求当前默认密码

从MySQL 8.0.19开始,改变用户允许这些password_option控制登录失败跟踪的值:

  • FAILED_LOGIN_ATTEMPTSN

    是否跟踪指定错误密码的帐户登录尝试。N必须是0到32767之间的数字。值为0将禁用登录失败跟踪。大于0的值表示连续密码错误导致临时帐户锁定的次数(如果PASSWORD_LOCK_TIME也非零)。

  • PASSWORD_LOCK_TIME {N|无限}

    如果连续多次登录失败,需要多长时间锁定帐户?N必须是0到32767之间的数字,还是无限.值为0禁用临时帐户锁定。大于0的值表示锁定多长时间(天)。的值无限导致账户锁定时间无界;一旦被锁定,帐户将一直处于锁定状态,直到解锁。有关发生解锁的条件的信息,请参见失败的登录跟踪和临时帐户锁定

对于失败的登录跟踪和临时锁定发生,帐户的FAILED_LOGIN_ATTEMPTS而且PASSWORD_LOCK_TIME选项都必须是非零的。以下语句用于修改连续4次密码输入错误后帐户锁定2天的情况:

ALTER USER 'jeffrey'@'localhost' FAILED_LOGIN_ATTEMPTS 4 PASSWORD_LOCK_TIME
更改用户帐户锁定选项

MySQL支持帐户锁定和解锁使用账户锁定而且账号解锁选项,用于指定帐户的锁定状态。有关其他讨论,请参见章节6.2.19,“账户锁定”

如果指定了多个帐户锁定选项,则最后一个选项优先。

从MySQL 8.0.19开始,改变用户……解锁解锁由语句命名的任何帐户,该语句由于登录失败太多而被临时锁定。看到第6.2.15节,“密码管理”

ALTER USER二进制日志

改变用户如果成功,则写入二进制日志,但如果失败,则不写入;在这种情况下,将发生回滚,并且不会进行任何更改。写入二进制日志的语句包含所有命名用户。如果如果存在子句中,甚至包括不存在且未被修改的用户。

如果原始语句更改了某个用户的凭据,写入二进制日志的语句指定了该用户适用的认证插件,确定如下:

  • 在原始语句中命名的插件,如果有指定的话。

  • 否则,如果用户存在,则使用与该用户关联的插件;如果用户不存在,则使用默认的认证插件。(如果写入二进制日志的语句必须为用户指定特定的身份验证插件,则在原始语句中包含它。)

如果服务器在写入二进制日志的语句中添加任何用户的默认身份验证插件,它就会向命名这些用户的错误日志写入一个警告。

如果原始语句指定FAILED_LOGIN_ATTEMPTSPASSWORD_LOCK_TIME选项时,写入二进制日志的语句包含该选项。