• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • ALTER USER语句

    MySQL帐户信息存储在mysql系统架构的表中。在“MySQL服务器管理”中将广泛讨论此数据库和访问控制系统,有关更多详细信息,请查阅。

    重要

    一些MySQL版本对授予表进行了更改,以添加新的特权或功能。为了确保您可以利用所有新功能,每当升级MySQL时,将授权表更新为当前结构。请参见“升级MySQL”。

    read_only启用了系统变量,账户管理语句需要CONNECTION_ADMINSUPER特权,除了任何其他所需的权限。这是因为它们会修改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_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 PASSWORDDISCARD OLD PASSWORD子句ALTER USER应用到自己的帐户报表。由于大多数用户仅需要一个密码,因此需要特权来操作您自己的辅助密码。
      • 如果要允许一个帐户操作所有帐户的辅助密码,则它需要CREATE USER特权而不是APPLICATION_PASSWORD_ADMIN

    read_only启用了系统变量,ALTER USER另外需要CONNECTION_ADMINSUPER特权。

    默认情况下,如果您尝试修改不存在的用户,则会发生错误。如果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_USERCURRENT_USER()引用与当前会话关联的帐户。

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

    ALTER USER USER() IDENTIFIED BY 'auth_string';
    

    使用此语法可以更改您自己的密码,而无需按实际名称命名您的帐户。(语法还支持REPLACERETAIN 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_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;
    

    IDENTIFIED BYfollowing 的值jeffrey仅适用于其前一个帐户,因此它将密码更改为 only 。对于,没有每个帐户的值(因此,密码保持不变)。对于,建立一个新密码(),指定该密码以验证发出该语句的用户是否知道当前密码(),并且该当前密码也保留为帐户辅助密码。(因此,可以使用主密码或辅助密码进行连接。)'jeffrey_new_password'jeffreyjeannejoshIDENTIFIED BY'josh_new_password'REPLACEALTER 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
    • 该子句执行密码验证,自MySQL 8.0.13起可用。如果给出:REPLACE 'current_auth_string'

      • REPLACE以明文(未加密)字符串指定要替换的帐户当前密码。
      • 如果需要更改密码以指定当前密码,则必须提供该子句,以验证尝试进行更改的用户实际上知道当前密码。
      • 如果帐户的密码更改可以但不必指定当前密码,则该子句是可选的。
      • 如果给定了该子句但与当前密码不匹配,即使该子句是可选的,该语句也会失败。
      • REPLACE仅在更改当前用户的帐户密码时可以指定。

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

    • RETAIN CURRENT PASSWORDDISCARD 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_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';
    

    有关设置密码和身份验证插件的更多信息,请参见“帐户密码管理”和“可插入身份验证”。

    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_USERALTER 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';
      

    SUBJECTISSUERCIPHER选项可以在组合中的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资源限制选项

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

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

    ALTER USER允许这些resource_option值:

    • MAX_QUERIES_PER_HOUR count,,MAX_UPDATES_PER_HOUR countMAX_CONNECTIONS_PER_HOUR count

      对于该语句命名的所有帐户,这些选项限制了在任何给定的一小时内允许每个帐户进行多少次查询,更新和与服务器的连接。如果count0(默认值),则表示该帐户没有限制。

    • MAX_USER_CONNECTIONS count

      对于该语句命名的所有帐户,限制每个帐户同时连接到服务器的最大数量。非零count显式指定帐户的限制。如果count0(默认值),则服务器根据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密码管理值:

    • 密码到期选项:您可以手动使帐户密码到期并建立其密码到期策略。策略选项不会使密码失效。取而代之的是,他们根据密码使用期限来确定服务器如何将自动过期时间应用于该帐户,密码使用期限是根据最近一次帐户密码更改的日期和时间来评估的。
    • 密码重用选项:您可以基于密码更改次数,经过时间或两者兼而有之来限制密码重用。
    • 需要密码验证的选项:您可以指示更改帐户密码的尝试是否必须指定当前密码,以验证尝试进行更改的用户实际上是否知道当前密码。
    • 错误密码失败登录跟踪选项:您可以使服务器跟踪失败的登录尝试并暂时锁定为其提供过多连续不正确密码的帐户。所需的失败次数和锁定时间是可配置的。

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

    如果指定了给定类型的多个密码管理选项,则最后一个优先。例如,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_ATTEMPTSPASSWORD_LOCK_TIME选项都必须为非零。以下语句修改了一个帐户,使其在连续四次密码失败后仍保持锁定状态两天:

    ALTER USER 'jeffrey'@'localhost'
    FAILED_LOGIN_ATTEMPTS 4 PASSWORD_LOCK_TIME 2;
    

    ALTER USER帐户锁定选项

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

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

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

    ALTER USER二进制记录

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

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

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

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

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