搜文章
推荐 原创 视频 Java开发 iOS开发 前端开发 JavaScript开发 Android开发 PHP开发 数据库 开发工具 Python开发 Kotlin开发 Ruby开发 .NET开发 服务器运维 开放平台 架构师 大数据 云计算 人工智能 开发语言 其它开发
Lambda在线 > DBA随笔 > MySQL8.0密码管理---(一)

MySQL8.0密码管理---(一)

DBA随笔 2020-02-20


MySQL8.0密码管理---(一)
//
MySQL8.0密码管理---(一)
//


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

0 1
直观对比密码加密算法

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

#MySQL5.7
mysql> show create user root@'127.0.0.1'\G
*************************** 1. row ***************************
CREATE USER for root@127.0.0.1: 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 root@127.0.0.1: 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。


   时间原因,先这么多吧。


有帮助的话还希望点下再看哈


版权声明:本站内容全部来自于腾讯微信公众号,属第三方自助推荐收录。《MySQL8.0密码管理---(一)》的版权归原作者「DBA随笔」所有,文章言论观点不代表Lambda在线的观点, Lambda在线不承担任何法律责任。如需删除可联系QQ:516101458

文章来源: 阅读原文

相关阅读

关注DBA随笔微信公众号

DBA随笔微信公众号:gh_acc2bbc0d447

DBA随笔

手机扫描上方二维码即可关注DBA随笔微信公众号

DBA随笔最新文章

精品公众号随机推荐