alter user mysql_mysql8 参考手册-- ALTER USER语句

冷不防 2023-01-11 08:17 909阅读 0赞

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_option

ALTER USER [IF EXISTS]

user DEFAULT ROLE

{NONE | ALL | role [, role ] …}

user:

(see Section 6.2.4, “Specifying Account 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_plugin BY ‘auth_string’

[REPLACE ‘current_auth_string’]

[RETAIN CURRENT PASSWORD]

| IDENTIFIED WITH auth_plugin BY RANDOM PASSWORD

[REPLACE ‘current_auth_string’]

[RETAIN CURRENT PASSWORD]

| IDENTIFIED WITH auth_plugin AS ‘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,这意味着具有对该信息的读取访问权限的任何人都可以读取明文密码。有关服务器日志发生这种情况的条件以及如何控制它的信息,请参见第6.1.2.3节“密码和日志记录”。

ALTER USER也可以指定 CURRENT_USER或 CURRENT_USER()引用与当前会话关联的帐户。

仅对于一种语法,可以使用以下USER()功能指定帐户 :

ALTER USER USER() IDENTIFIED BY ‘auth_string’;

使用此语法可以更改您自己的密码,而无需按实际名称命名您的帐户。

对于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_password BY ‘new_password’

PASSWORD EXPIRE INTERVAL 180 DAY

FAILED_LOGIN_ATTEMPTS 3 PASSWORD_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 2

PASSWORD HISTORY 5;

jeffrey后面的IDENTIFIED BY值仅适用于其前一个帐户,因此它将密码更改为“jeffrey_new_password”,仅适用于jeffrey。对于jeanne,没有每个帐户的值(因此保持密码不变)。对于通过建立新密码(‘josh_new_password’)标识的josh,指定REPLACE来验证发出ALTER user语句的用户是否知道当前密码(‘josh_current_password’),并且当前密码也保留为帐户辅助密码。(因此,josh可以使用主密码或辅助密码进行连接。)

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

需要连接才能使用SSL。

帐户最多可用于两个同时连接。

密码更改不能重用五个最新密码中的任何一个。

示例:放弃josh的辅助密码,只保留其主密码:

ALTER USER ‘josh’@’localhost’ DISCARD OLD PASSWORD;

ALTER USER身份验证选项

帐户名后可以带有一个 auth_option身份验证选项,该选项指定了帐户身份验证插件,凭据或两者。它还可能包括密码验证子句,该子句指定要替换的帐户当前密码,以及管理帐户是否具有辅助密码的子句。

注意

随机密码生成,密码验证和辅助密码的条款仅适用于使用身份验证插件的帐户,该身份验证插件将凭据存储在内部。对于使用插件执行针对MySQL外部凭据系统进行身份验证的插件的帐户,密码管理也必须针对该系统从外部进行处理。有关内部凭据存储的更多信息,请参见 第6.2.15节“密码管理”。

auth_plugin命名身份验证插件。插件名称可以是带引号的字符串文字或不带引号的名称。插件名称存储在系统表的plugin列中 mysql.user。

对于auth_option未指定身份验证插件的语法,默认插件由default_authentication_plugin 系统变量的值指示 。有关每个插件的说明,请参见 第6.4.1节“身份验证插件”。

内部存储的凭证存储在 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

该 子句执行密码验证,自MySQL 8.0.13起可用。如果给出: REPLACE ‘current_auth_string’

REPLACE 以明文(未加密)字符串指定要替换的帐户当前密码。

如果需要更改密码以指定当前密码,则必须提供该子句,以验证尝试进行更改的用户实际上知道当前密码。

如果帐户的密码更改可以但不必指定当前密码,则该子句是可选的。

如果给定了该子句但与当前密码不匹配,即使该子句是可选的,该语句也会失败。

REPLACE 仅在更改当前用户的帐户密码时可以指定。

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

在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如果存在辅助密码,则丢弃该辅助密码。该帐户仅保留其主密码,并且客户端只能使用该主密码来使用该帐户连接到服务器。

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

ALTER USER允许以下 auth_option语法:

IDENTIFIED BY ‘auth_string’ [REPLACE ‘current_auth_string’] [RETAIN CURRENT PASSWORD]

将帐户身份验证插件设置为默认插件,将明文 值传递 给该插件以进行可能的散列,并将结果存储在系统表的帐户行中 。 ‘auth_string’mysql.user

该REPLACE子句(如果提供)指定了帐户的当前密码,如本节前面所述。

The RETAIN CURRENT PASSWORD clause, if given, causes the account current password to be retained as its secondary password, as described previously in this section.

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_password

BY ‘password’;

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

ALTER USER ‘jeffrey’@’localhost’

IDENTIFIED WITH mysql_native_password

BY ‘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_password

AS ‘*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF4’;

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

ALTER USER角色选项

ALTER USER … DEFAULT ROLE定义当用户连接到服务器并进行身份验证时,或者SET ROLE DEFAULT在会话期间用户执行语句时,哪些角色将变为活动状态 。

ALTER USER … DEFAULT ROLE是的替代语法 SET DEFAULT ROLE(请参见 第13.7.1.9节“ SET DEFAULT ROLE语句”)。但是, ALTER USER只能为单个用户SET DEFAULT ROLE设置默认值,而可以为多个用户设置默认值。另一方面,您可以指定 CURRENT_USER该ALTER USER语句的用户名 ,而不能指定SET DEFAULT ROLE。

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

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

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的背景信息,请参见第6.3节“使用加密的连接”。

要为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

AND ISSUER ‘/C=SE/ST=Stockholm/L=Stockholm/

O=MySQL/CN=CA/emailAddress=ca@example.com

AND CIPHER ‘EDH-RSA-DES-CBC3-SHA’;

ALTER USER资源限制选项

如第6.2.20节“设置帐户资源限制”中所述,可以限制帐户对服务器资源的使用。为此,请使用WITH指定一个或多个resource_option值的子句。

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

ALTER USER允许这些 resource_option值:

MAX_QUERIES_PER_HOUR count, , MAX_UPDATES_PER_HOUR countMAX_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 500 MAX_UPDATES_PER_HOUR 100;

ALTER USER密码管理选项

ALTER USER支持多个 password_option密码管理值:

密码到期选项:您可以手动使帐户密码到期并建立其密码到期策略。策略选项不会使密码失效。取而代之的是,他们根据密码使用期限来确定服务器如何将自动过期时间应用于该帐户,密码使用期限是根据最近一次帐户密码更改的日期和时间评估的。

密码重用选项:您可以基于密码更改次数,经过时间或两者兼而有之来限制密码重用。

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

错误密码失败登录跟踪选项:您可以使服务器跟踪失败的登录尝试并暂时锁定为其提供过多连续不正确密码的帐户。所需的失败次数和锁定时间是可配置的。

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

如果指定了给定类型的多个密码管理选项,则最后一个优先。例如, PASSWORD EXPIRE DEFAULT PASSWORD EXPIRE NEVER与相同PASSWORD EXPIRE NEVER。

注意

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

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

注意

尽管可以通过将过期的密码设置为当前值来“ 重置 ”它,但出于良好的政策考虑,最好选择其他密码。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 4 PASSWORD_LOCK_TIME 2;

ALTER USER帐户锁定选项

MySQL支持使用ACCOUNT LOCK和ACCOUNT UNLOCK选项锁定和解锁帐户 ,该选项指定帐户的锁定状态。有关更多讨论,请参见 第6.2.19节“帐户锁定”。

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

从MySQL 8.0.19开始, ALTER USER … UNLOCK解锁由由于过多失败登录而被暂时锁定的语句命名的任何帐户。请参见 第6.2.15节“密码管理”。

ALTER USER二进制记录

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

如果原始语句更改了用户的凭据,则写入二进制日志的语句将为该用户指定适用的身份验证插件,确定方式如下:

如果指定了原始语句中命名的插件。

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

如果服务器在写入二进制日志的语句中为所有用户添加了默认身份验证插件,则会向错误日志中写入警告以命名这些用户。

如果原始语句指定了 FAILED_LOGIN_ATTEMPTSor PASSWORD_LOCK_TIME选项,则写入二进制日志的语句将包含该选项。

发表评论

表情:
评论列表 (有 0 条评论,909人围观)

还没有评论,来说两句吧...

相关阅读