暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL的SQL语句 - 数据库管理语句 - 账户管理语句 - CREATE USER 语句(1)

数据库杂货铺 2021-04-12
387

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] ...
    [COMMENT 'comment_string' | ATTRIBUTE 'json_object']


    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 权限,或者 mysql 系统模式的 INSERT 权限。启用 read_only 系统变量时,CREATE USER 还需要 CONNECTION_ADMIN 权限(或不推荐使用的 SUPER 权限)。

     

    从 MySQL 8.0.22 开始,如果要创建的任何帐户被命名为存储对象的 DEFINER 属性,CREATE USER 将失败。(也就是说,如果创建帐户会导致该帐户采用当前孤立的存储对象,则该语句将失败。)要执行该操作,必须具有 SET_USER_ID 权限;在这种情况下,该语句将成功,但会带有警告信息,而不是失败。没有 SET_USER_ID,则要执行用户创建操作,请删除孤立对象,创建帐户并授予其权限,然后重新创建删除的对象。

     

    CREATE USER 要么对所有指定用户都成功,如果发生任何错误则回滚,不做任何更改。默认情况下,如果尝试创建已存在的用户,则会发生错误。如果给定 IF NOT EXISTS 子句,则该语句将为已存在的每个指定用户生成警告,而不是错误。

     

    CREATE USER 概述

     

    对于每个帐户,CREATE USER 在 mysql.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 值仅应用于紧跟在它前面的帐户。

       

      根据用户规范,该语句可能包括 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 个查询。

             

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

             

            ● 帐户最初是锁定的,因此实际上它是一个占位符,只有管理员解锁后才能使用。

             

            从 MySQL 8.0.21 开始,可以选择创建带有用户注释或用户属性的用户,如下所述:

             

            ● 用户注释

             

            要设置用户注释,请将 COMMENT 'user_comment' 添加到 CREATE USER 语句中,其中 user_comment 是用户注释的文本。

             

            示例(省略任何其他选项):

             

              CREATE USER 'jon'@'localhost' COMMENT 'Some information about Jon';

               

              ● 用户属性

               

              用户属性是由一个或多个键值对组成的 JSON 对象,通过将 ATTRIBUTE 'json_object' 作为 CREATE USER 的一部分来设置。json_object 必须是有效的 JSON 对象。

               

              示例(省略任何其他选项):

               

                CREATE USER 'jim'@'localhost'
                ATTRIBUTE '{"fname": "James", "lname": "Scott", "phone": "123-456-7890"}';

                 

                用户注释和用户属性一起存储在 INFORMATION_SCHEMA.USER_ATTRIBUTES 表的 ATTRIBUTE 列。此查询显示表中由刚才创建用户 jim@localhost 的语句插入的行:

                 

                  mysql> SELECT * FROM INFORMATION_SCHEMA.USER_ATTRIBUTES
                  -> WHERE USER = 'jim' AND HOST = 'localhost'\G
                  *************************** 1. row ***************************
                  USER: jim
                  HOST: localhost
                  ATTRIBUTE: {"fname": "James", "lname": "Scott", "phone": "123-456-7890"}
                  1 row in set (0.00 sec)

                   

                  实际上,COMMENT 选项提供了一个快捷方式,用于设置用户属性,该属性的唯一元素的键是 comment,其值是为该选项提供的参数。可以通过执行 CREATE USER 'jon'@'localhost' COMMENT 'Some information about Jon' 语句并观察它插入到 USER_ATTRIBUTES 表中的行来看到这一点:

                   

                    mysql> CREATE USER 'jon'@'localhost' COMMENT 'Some information about Jon';
                    Query OK, 0 rows affected (0.06 sec)


                    mysql> SELECT * FROM INFORMATION_SCHEMA.USER_ATTRIBUTES
                    -> WHERE USER = 'jon' AND HOST = 'localhost';
                    +------+-----------+-------------------------------------------+
                    | USER | HOST | ATTRIBUTE |
                    +------+-----------+-------------------------------------------+
                    | jon | localhost | {"comment": "Some information about Jon"} |
                    +------+-----------+-------------------------------------------+
                    1 row in set (0.00 sec)

                     

                    不能在同一 CREATE USER 语句中同时使用 COMMENT ATTRIBUTE;尝试这样做会导致语法错误。要在设置用户属性的同时设置用户注释,请使用 ATTRIBUTE 并在其参数中包含带有 comment 键的值,如下所示:

                     

                      mysql> CREATE USER 'bill'@'localhost'
                      -> ATTRIBUTE '{"fname":"William", "lname":"Schmidt",
                      -> "comment":"Website developer"}';
                      Query OK, 0 rows affected (0.16 sec)

                       

                      由于 ATTRIBUTE 列的内容是一个 JSON 对象,因此可以使用任何适当的 MySQL JSON 函数或运算符来操作它,如下所示:

                       

                        mysql> SELECT
                        -> USER AS User,
                        -> HOST AS Host,
                        -> CONCAT(ATTRIBUTE->>"$.fname"," ",ATTRIBUTE->>"$.lname") AS 'Full Name',
                        -> ATTRIBUTE->>"$.comment" AS Comment
                        -> FROM INFORMATION_SCHEMA.USER_ATTRIBUTES
                        -> WHERE USER='bill' AND HOST='localhost';
                        +------+-----------+-----------------+-------------------+
                        | User | Host | Full Name | Comment |
                        +------+-----------+-----------------+-------------------+
                        | bill | localhost | William Schmidt | Website developer |
                        +------+-----------+-----------------+-------------------+
                        1 row in set (0.00 sec)

                         

                        要设置或更改现有用户的用户注释或用户属性,可以将 COMMENT 或 ATTRIBUTE 选项与 ALTER USER 语句一起使用。

                         

                        因为用户注释和用户属性在内部存储在一个 JSON 列中,所以这会对它们的最大组合大小设置一个上限。

                         

                         

                         

                         

                         

                        官方网址:

                        https://dev.mysql.com/doc/refman/8.0/en/create-user.html

                         


                        文章转载自数据库杂货铺,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                        评论