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

    CREATE USER [IF NOT EXISTS]
        user [auth_option] [, user [auth_option]] ...
        DEFAULT ROLE role [, role ] ...
        [REQUIRE {NONE | tls_option [[AND] tls_option] ...}]
        [WITH resource_option [resource_option] ...]
        [password_option | lock_option] ...
    
    user:
        (see Section 6.2.4, “Specifying Account Names”)
    
    auth_option: {
        IDENTIFIED BY 'auth_string'
      | IDENTIFIED BY RANDOM PASSWORD
      | IDENTIFIED WITH auth_plugin
      | IDENTIFIED WITH auth_plugin BY 'auth_string'
      | IDENTIFIED WITH auth_plugin BY RANDOM PASSWORD
      | IDENTIFIED WITH auth_plugin AS 'auth_string'
    }
    
    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
    }
    

    CREATE USER语句创建新的MySQL帐户。它允许为新帐户建立身份验证,角色,SSL / TLS,资源限制和密码管理属性。它还控制帐户是最初被锁定还是解锁。

    要使用CREATE USER,您必须具有全局CREATE USER特权或系统架构的INSERT特权mysql。当read_only启用了系统变量,CREATE USER另外需要CONNECTION_ADMINSUPER特权。

    CREATE USER要么对所有命名用户成功,要么回滚,并且如果发生任何错误,则无效。默认情况下,如果您尝试创建一个已经存在的用户,则会发生错误。如果IF NOT EXISTS给出了该子句,则该语句为每个已经存在的命名用户生成警告,而不是错误。

    重要

    在某些情况下,CREATE USER可能会记录在服务器日志中或客户端的历史记录文件中,例如~/.mysql_history,这意味着具有对该信息的读取访问权限的任何人都可以读取明文密码。有关服务器日志发生这种情况的条件以及如何控制它的信息,有关客户端日志记录的类似信息,请参见“ mysql客户端日志记录”。

    CREATE USER语句有多个方面,在以下主题下进行了描述:

    • 创建用户概述
    • 创建用户身份验证选项
    • 创建用户角色选项
    • 创建用户SSL / TLS选项
    • 创建用户资源限制选项
    • 创建用户密码管理选项
    • 创建用户帐户锁定选项
    • 创建用户二进制日志

    创建用户概述

    对于每个帐户,CREATE USERmysql.user系统表中创建一个新行。帐户行反映了语句中指定的属性。未指定的属性设置为其默认值:

    • 身份验证:由default_authentication_plugin系统变量定义的身份验证插件和空凭据
    • 默认角色:NONE
    • SSL / TLS:NONE
    • 资源限制:无限制
    • 密码管理:PASSWORD EXPIRE DEFAULT PASSWORD HISTORY DEFAULT PASSWORD REUSE INTERVAL DEFAULT PASSWORD REQUIRE CURRENT DEFAULT;失败登录跟踪和临时帐户锁定被禁用
    • 帐户锁定:ACCOUNT UNLOCK

    首次创建帐户时没有权限,默认角色为NONE。要分配特权或角色,请使用以下GRANT语句。

    每个帐户名均使用“指定帐户名”中所述的格式。例如:

    CREATE USER 'jeffrey'@'localhost' IDENTIFIED BY 'password';
    

    帐户名的主机名部分(如果省略)默认为'%'

    user命名帐户的每个值后面都可以有一个可选auth_option值,该值指示帐户的身份验证方式。这些值使可以指定帐户身份验证插件和凭据(例如密码)。每个auth_option值适用到一个名为的前一个帐户。

    根据user规范,该语句可能包括SSL / TLS,资源限制,密码管理和锁定属性的选项。所有这些选项对于报表都是全局的,并且适用于报表中命名的所有帐户。

    示例:创建一个使用默认身份验证插件和给定密码的帐户。将密码标记为过期,以便用户必须在与服务器的第一次连接时选择一个新密码:

    CREATE USER 'jeffrey'@'localhost'
      IDENTIFIED BY 'new_password' PASSWORD EXPIRE;
    

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

    CREATE USER 'jeffrey'@'localhost'
      IDENTIFIED WITH caching_sha2_password BY 'new_password'
      PASSWORD EXPIRE INTERVAL 180 DAY
      FAILED_LOGIN_ATTEMPTS 3 PASSWORD_LOCK_TIME 2;
    

    示例:创建多个帐户,并指定一些每个帐户属性和一些全局属性:

    CREATE USER
      'jeffrey'@'localhost' IDENTIFIED WITH mysql_native_password
                                       BY 'new_password1',
      'jeanne'@'localhost' IDENTIFIED WITH caching_sha2_password
                                      BY 'new_password2'
      REQUIRE X509 WITH MAX_QUERIES_PER_HOUR 60
      PASSWORD HISTORY 5
      ACCOUNT LOCK;
    

    每个auth_option值(IDENTIFIED WITH ... BY在这种情况下)仅适用于紧随其后命名的帐户,因此每个帐户都使用紧随其后的身份验证插件和密码。

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

    • 必须使用有效的X.509证书进行连接。
    • 每小时最多允许60个查询。
    • 密码更改不能重复使用五个最新密码中的任何一个。
    • 该帐户最初是被锁定的,因此实际上是一个占位符,在管理员将其解锁之前无法使用。

    创建用户身份验证选项

    帐户名后可以带有一个auth_option身份验证选项,该选项指定了帐户身份验证插件,凭据或两者。

    注意

    随机密码生成的条款仅适用于使用身份验证插件的帐户,该身份验证插件在内部将凭据存储在MySQL中。对于使用插件执行针对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

    CREATE USER允许以下auth_option语法:

    • IDENTIFIED BY 'auth_string'

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

    • IDENTIFIED BY RANDOM PASSWORD

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

    • IDENTIFIED WITH auth_plugin

      将帐户身份验证插件设置为auth_plugin,将凭据清除为空字符串,并将结果存储在mysql.user系统表的帐户行中。

    • IDENTIFIED WITH auth_plugin BY 'auth_string'

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

    • IDENTIFIED WITH auth_plugin BY RANDOM PASSWORD

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

    • IDENTIFIED WITH auth_plugin AS 'auth_string'

      将帐户身份验证插件设置为auth_plugin并按原样在帐户行中存储值。如果插件需要哈希字符串,则假定该字符串已经以插件所需的格式进行哈希处理。'auth_string'mysql.user

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

    CREATE USER 'jeffrey'@'localhost'
      IDENTIFIED BY 'password';
    

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

    CREATE USER 'jeffrey'@'localhost'
      IDENTIFIED WITH mysql_native_password BY 'password';
    

    在每种情况下,存储在帐户行中的密码值都是由与该帐户关联的身份验证插件将其哈希后的明文值。'password'

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

    创建用户角色选项

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

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

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

    角色名称的主机名部分(如果省略)默认为'%'

    DEFAULT ROLE子句允许列出一个或多个逗号分隔的角色名称。这些角色在CREATE USER执行时不需要存在。

    创建用户SSL / TLS选项

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

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

    REQUIRE选项的顺序无关紧要,但是不能两次指定选项。该AND关键字是可选之间REQUIRE选择。

    CREATE USER允许这些tls_option值:

    • NONE

      表示该语句命名的所有帐户都没有SSL或X.509要求。如果用户名和密码有效,则允许未加密的连接。如果客户端具有正确的证书和密钥文件,则可以选择使用加密连接。

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

      默认情况下,客户端尝试建立安全连接。对于具有的客户端,REQUIRE NONE如果无法建立安全连接,则连接尝试将退回到未加密的连接。要要求加密连接,客户端只需要指定--ssl-mode=REQUIRED选项即可;如果无法建立安全连接,则连接尝试将失败。

      NONE如果未REQUIRE指定与SSL相关的选项,则为默认值。

    • SSL

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

      CREATE USER 'jeffrey'@'localhost' REQUIRE SSL;
      

      默认情况下,客户端尝试建立安全连接。对于具有的帐户,REQUIRE SSL如果无法建立安全连接,则连接尝试将失败。

    • X509

      对于该语句命名的所有帐户,要求客户提供有效的证书,但是确切的证书,颁发者和主题无关紧要。唯一的要求是,应该可以使用其中一个CA证书来验证其签名。X.509证书的使用总是暗含加密,因此SSL在这种情况下,此选项是不必要的。

      CREATE 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

      CREATE 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在这种情况下,此选项是不必要的。

      CREATE 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'

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

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

    SUBJECTISSUERCIPHER选项可以在组合中的REQUIRE条款:

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

    创建用户资源限制选项

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

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

    CREATE 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也为零,则该帐户没有限制。

    例:

    CREATE USER 'jeffrey'@'localhost'
    WITH MAX_QUERIES_PER_HOUR 500 MAX_UPDATES_PER_HOUR 100;
    

    创建用户密码管理选项

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

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

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

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

    注意

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

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

    CREATE USER允许使用以下password_option值来控制密码的到期时间:

    • PASSWORD EXPIRE

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

      CREATE USER 'jeffrey'@'localhost' PASSWORD EXPIRE;
      
    • PASSWORD EXPIRE DEFAULT

      设置该语句命名的所有帐户,以便应用default_password_lifetime系统策略指定的全局到期策略。

      CREATE USER 'jeffrey'@'localhost' PASSWORD EXPIRE DEFAULT;
      
    • PASSWORD EXPIRE NEVER

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

      CREATE USER 'jeffrey'@'localhost' PASSWORD EXPIRE NEVER;
      
    • PASSWORD EXPIRE INTERVAL N DAY

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

      CREATE USER 'jeffrey'@'localhost' PASSWORD EXPIRE INTERVAL 180 DAY;
      

    CREATE USER允许这些password_option值用于根据所需的最小密码更改次数控制先前密码的重用:

    • PASSWORD HISTORY DEFAULT

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

      CREATE USER 'jeffrey'@'localhost' PASSWORD HISTORY DEFAULT;
      
    • PASSWORD HISTORY N

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

      CREATE USER 'jeffrey'@'localhost' PASSWORD HISTORY 6;
      

    CREATE USER允许这些password_option值用于根据经过的时间来控制先前密码的重用:

    • PASSWORD REUSE INTERVAL DEFAULT

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

      CREATE USER 'jeffrey'@'localhost' PASSWORD REUSE INTERVAL DEFAULT;
      
    • PASSWORD REUSE INTERVAL N DAY

      这个经过时间的选项会覆盖该语句命名的所有帐户的全局策略。对于每个密码,它将密码重用间隔设置为N几天,以禁止重用比该天数新的密码。以下语句禁止360天重复使用密码:

      CREATE USER 'jeffrey'@'localhost' PASSWORD REUSE INTERVAL 360 DAY;
      

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

    • PASSWORD REQUIRE CURRENT

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

      CREATE USER 'jeffrey'@'localhost' PASSWORD REQUIRE CURRENT;
      
    • PASSWORD REQUIRE CURRENT OPTIONAL

      该验证选项将覆盖该语句命名的所有帐户的全局策略。对于每个密码,不需要更改密码即可指定当前密码。(可以但不必提供当前密码。)

      CREATE USER 'jeffrey'@'localhost' PASSWORD REQUIRE CURRENT OPTIONAL;
      
    • PASSWORD REQUIRE CURRENT DEFAULT

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

      CREATE USER 'jeffrey'@'localhost' PASSWORD REQUIRE CURRENT DEFAULT;
      

    从MySQL 8.0.19开始,CREATE 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选项都必须为非零。以下语句创建一个帐户,该帐户在连续四次密码失败后仍保持锁定状态两天:

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

    创建用户帐户锁定选项

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

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

    创建用户二进制日志

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

    写入二进制日志的语句为每个用户指定一个身份验证插件,确定方式如下:

    • 如果指定了原始语句中命名的插件。
    • 否则,默认身份验证插件。特别是,如果用户u1已经存在并使用非默认身份验证插件,则写入二进制日志的语句将CREATE USER IF NOT EXISTS u1命名为默认身份验证插件。(如果写入二进制日志的语句必须为用户指定非默认身份验证插件,则将其包括在原始语句中。)

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

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