前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL8.0---Create user的那些属性

MySQL8.0---Create user的那些属性

作者头像
AsiaYe
发布2021-11-25 11:44:46
8880
发布2021-11-25 11:44:46
举报
文章被收录于专栏:DBA随笔DBA随笔

MySQL8.0---Create user的那些属性

01MySQL8.0.27版本简介

MySQL目前最新版本是8.0.27,今天下载了一个,尝尝鲜。这个版本,更像是一个bug 修复版本,修复了200多个bug。

看到这个结果,如果你线上版本要选择8.0系列,建议避开8.0.26和8.0.27,这其中的原因是:

第一,8.0.26版本bug太多,不建议作为线上;

第二,8.0.27修复了这些bug,所以代码变动比较多,不建议用这样的版本作为线上版本。

我主要对这个Create User这个语法感兴趣,这里谈两点改变:

第一,create user和alter user语法,支持定义多种认证方法;

第二,用户程序可以使用--password1,--password2,--password3三个密码来登录MySQL

但是这个内容后面会专门用文章去讲解,今天主要来看create user里面那些冗长复杂的属性

02create user语法

我简单写了个create user语法,还是有很多的收获的。

代码语言:javascript
复制
mysql> create user yeyz@'10.%';
ERROR 4031 (HY000): The client was disconnected by the server because of inactivity. See wait_timeout and interactive_timeout for configuring this behavior.
No connection. Trying to reconnect...
Connection id:    1606616
Current database: *** NONE ***

Query OK, 0 rows affected (0.01 sec)

mysql> 
mysql> show create user yeyz@'10.%';
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| CREATE USER for yeyz@10.%                                                                                                                                                                                       |
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| CREATE USER `yeyz`@`10.%` IDENTIFIED WITH 'mysql_native_password' REQUIRE NONE PASSWORD EXPIRE DEFAULT ACCOUNT UNLOCK PASSWORD HISTORY DEFAULT PASSWORD REUSE INTERVAL DEFAULT PASSWORD REQUIRE CURRENT DEFAULT |
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

1、红色提示部分,直接给我们提示由于连接不活跃,MySQL Server断开连接,需要考虑是否是wait_timeout和interactive_timeout参数,这一点更加人性化了。

2、在MySQL8.0.27中,一个账号具有很多属性,例如:

  • IDENTIFIED WITH 'mysql_native_password':认证方法

可以选择下面3种,

mysql_native_password

sha256_password

caching_sha2_password

其中默认值是caching_sha2_password,从安全性角度说,它比另外的方法更安全,但是为了和低版本5.7兼容,更倾向于选择mysql_native_password,因为mysql_native_password是MySQL5.7的默认加密方法

  • REQUIRE NONE:是否加密客户端连接

如果你的MySQL需要对当前的客户连接加密,需要通过ssl模式连接,这个时候,在客户端就需要配置 --ssl-mode=REQUIRED,从而支持加密连接。如果Require选项是None,代表当前连接不加密。

  • PASSWORD EXPIRE DEFAULT:密码过期策略

这里采用默认的密码过期策略,默认的策略下,密码过期取决于参数default_password_lifetime,而这个参数的取值可以是0,代表不过期,也可以是一个数字N,代表N天过后,必须修改密码。

代码语言:javascript
复制
mysql> show variables like '%default_password_lifetime%';
+---------------------------+-------+
| Variable_name             | Value |
+---------------------------+-------+
| default_password_lifetime | 0     |
+---------------------------+-------+
1 row in set (0.00 sec)

除此之外,还可以取其他的值,例如

password expire never:密码永远不过期;

password expire INTERVAL N DAY:密码在N天后过期

password expire:密码立即过期(也不知道这功能想干啥)

  • Account Unlock:账号是否被锁定

通常情况下,创建一个账号的时候,可以去指定这个账号的锁定状态,在线上环境中,一个账号一般是不被锁定的,如果一个账号被锁定了,再去尝试连接这个账号,就会出现如下报错:

代码语言:javascript
复制
Access denied for user 'user_name'@'host_name'.
Account is locked.

在一些特殊场景下,我们可以通过暂时锁定某些账号,来将部分业务请求拦截在数据库外面。

  • PASSWORD HISTORY default :密码使用次数策略

这个属性代表当前数据库是否支持密码重复使用,后面可以跟两个值,分别是default和整数N。

如果是整数N,说明密码可以和之前的第N次密码相同;例如我们第一次设置密码aaa,第二次密码bbb,第三次密码ccc,如果N=3,那么我们在ccc密码过期之后,第四次密码就可以再设置为aaa;

如果N>3,代表第四次密码还不能设置为aaa,因为aaa是历史上最近的

如果是使用default,代表密码使用历史策略取决于password_history系统变量,如下:

代码语言:javascript
复制
mysql> show variables like '%password_history%';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| password_history | 0     |
+------------------+-------+
1 row in set (0.00 sec)

这里的0代表不设限,其他数字,跟上述描述一致。

注意:设定了具体的N之后,系统变量将会被忽略。

  • PASSWORD REUSE INTERVAL:密码使用时间策略

这个属性,跟上述属性类似,只不过是时间维度的,后面可以跟具体的天数N或者默认值default。

如果是具体的天数N:代表这个账号可以在N天内被使用,超过之后,必须换密码

代码语言:javascript
复制
CREATE USER 'jeffrey'@'localhost' PASSWORD REUSE INTERVAL 360 DAY;

上述案例代表密码可以被使用360天。

如果是default,那么具体的天数,取决于系统变量password_reuse_interval,如下:

代码语言:javascript
复制
mysql> show variables like '%password_reuse_interval%';
+-------------------------+-------+
| Variable_name           | Value |
+-------------------------+-------+
| password_reuse_interval | 0     |
+-------------------------+-------+
1 row in set (0.01 sec)

注意:设定了具体的N之后,系统设置将会被忽略

  • PASSWORD REQUIRE CURRENT:是否需要原密码认证

这个属性控制的是修改密码的时候,是否需要原来的密码认证,默认是不需要,它的取值可以是:空、optional或者default

如果后面什么都不跟,也就是空,则代表需要指定原来的密码才能够修改其他用户密码

如果选择的是optional,则不需要指定原来的密码,就能够修改其他用户的密码

如果选择的是default,则具体的行为,取决于password_require_current参数,如果是off,代表不需要原来的密码,如果是on,则代表需要原来的密码;

代码语言:javascript
复制
mysql> show variables like '%password_require_current%';
+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| password_require_current | OFF   |
+--------------------------+-------+
1 row in set (0.00 sec)

注意,如果定义了optional或者空,则系统变量password_require_current会被忽略。

另外,如果一个账号有create user权限或者有mysql.user表的update权限,则可以直接修改其他账号的密码,而不需要原来的密码。

简单总结一下:

利用Create user语法创建账号的时候,针对账号的密码本身,可以定义下面7个属性:

1、密码加密方式

2、是否加密客户端连接

3、账号密码是否有过期策略

4、账号是否被锁定

5、密码历史次数策略

6、密码使用天数策略

7、修改密码是否需要原密码策略

这些属性当然可以设置为默认,通常也是这么做的,但是MySQL8.0中引入的这些特性,可以在某些具体场景下,提高密码安全性和可用性。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-11-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DBA随笔 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
访问管理
访问管理(Cloud Access Management,CAM)可以帮助您安全、便捷地管理对腾讯云服务和资源的访问。您可以使用CAM创建子用户、用户组和角色,并通过策略控制其访问范围。CAM支持用户和角色SSO能力,您可以根据具体管理场景针对性设置企业内用户和腾讯云的互通能力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档