MySQL8.0密码管理—(一)

  • 2020 年 2 月 25 日
  • 筆記

//

MySQL8.0密码管理—(一)

//

今天来看看MySQL8.0在密码管理部分所做的一些改动。

01

直观对比密码加密算法

为对比不同,我们用MySQL5.7的密码和MySQL8.0的密码进行对比,同样的密码,不同的版本中,我们使用show create user语法进行查看,可以略见一些端倪:

#MySQL5.7  mysql> show create user root@'127.0.0.1'G  *************************** 1. row ***************************  CREATE USER for [email protected]: CREATE USER 'root'@'127.0.0.1' IDENTIFIED WITH 'mysql_native_password' AS '*4639C1B3C042674B279372A92CE75E872C90CD92' REQUIRE NONE PASSWORD EXPIRE DEFAULT ACCOUNT UNLOCK  1 row in set (0.00 sec)      #MySQL8.0  mysql> show create user root@'127.0.0.1'G  *************************** 1. row ***************************  CREATE USER for [email protected]: CREATE USER 'root'@'127.0.0.1' IDENTIFIED WITH 'caching_sha2_password' AS '$A$005$m8F#M>nG-y+%6L3LokFslnbidccedOaqdEFQLgywdOuMwarlRASB7kJbP5G5' 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)  

可以看见,MySQL5.7和MySQL8.0有不同的加密方法,MySQL5.7的默认加密算法是"mysql_native_password",而MySQL8.0的默认加密算法是"caching_sha2_password",同样的密码,在MySQL5.7和MySQL8.0中的加密结果是不一样的,这比较好容易理解,因为加密算法不一样。使用caching_sha2_password加密算法,让密码的加密程度更强。加密串的长度也更长,安全性更好。

02

MySQL8.0加密算法

在MySQL8.0中提供了两种身份认证插件对用户密码进行sha-256哈希加密,sha-256哈希函数是目前被公认的比较安全的加密函数,更多详情请大家自行了解。当然,旧版本的mysql_native_password的加密方法依旧可以兼容。

MySQL中的两种身份认证插件分别是sha256-password以及caching-sha2-password,二者都能实现基本的sha-256身份认证,不同的是caching-sha2-password可以在服务端使用高速缓存,从而提高性能。

MySQL8.0使用的默认加密算法是caching-sha2-password,不建议自行更改默认加密算法。除此之外,如果对MySQL的默认加密算法进行更改,则需要修改对应的libmysqlclient客户端库。

03

MySQL5.7升级MySQL8.0怎么办?

如果您恰好要想从MySQL5.7升级到MySQL8.0,那么在密码层面,有以下几点需要注意。

1、对于MySQL服务器来讲,default_authentication_plugin系统变量的默认值需要从mysql_native_password更改为caching_sha2_password

2、上述更改仅适用于MySQL升级之后创建的新账号,对于原有的mysql_native_password加密算法所加密的MySQL账号,高版本的MySQL可以向下兼容低版本。

3、如果要修改默认加密方式为caching_sha2_password,可使用下面的语句进行修改:

alter user xxx@xxx identified with "caching_sha2_password" by "password";

4、如果我们在升级MySQL8.0之后出现了账号的兼容性问题,为了保证账号的可用性,则需要我们对插件进行降级,可以使用修改配置文件的办法进行,如下:

[mysqld]  default_authentication_plugin=mysql_native_password  

但这会损失MySQL8.0新的加密方法带来的安全性。

04

可能存在的问题

在升级完MySQL8.0服务器之后,当我们用其他客户端或者第三方驱动去连接MySQL服务的时候,还可能碰到如下问题:

1、客户端或者第三方驱动的协议无法识别基于caching_sha2_password加密算法的插件。

2、认证时间可能会稍微延长,因为MySQL8.0兼容了MySQL5.7的密码认证方法,所以在认证过程中,需要判断到底使用何种算法对该账号的密码进行认证。当然,客户端本身可以使用进行–default-auth=mysql_native_password选项显示指定认证方法。

3、官方文档中制定了一些常用的支持caching-sha2-password的连接器,这里罗列出来,大家可以作为参考。

这些客户端和连接器已升级为支持caching_sha2_password:

MySQL 8.0(8.0.4或更高版本)中的libmysqlclient客户端库。标准MySQL客户端(例如mysql和mysqladmin)基于libmysqlclient,因此它们也兼容。

MySQL 5.7(5.7.23或更高版本)中的libmysqlclient客户端库。标准MySQL客户端(例如mysql和mysqladmin)基于libmysqlclient,因此它们也兼容。

MySQL Connector / C ++ 1.1.11或更高版本或8.0.7或更高版本。

MySQL Connector / J 8.0.9或更高版本。

MySQL Connector / NET 8.0.10或更高版本(通过经典的MySQL协议)。

MySQL Connector / Node.js 8.0.9或更高版本。

PHP:X DevAPI PHP扩展(mysql_xdevapi)支持caching_sha2_password。

时间原因,先这么多吧。