mysql create user identified by,MySQL的SQL语句 - 数据库管理语句 - 账户管理语句 - CREATE USER 语句(1)...

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: localhostATTRIBUTE: {"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 列中,所以这会对它们的最大组合大小设置一个上限。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值