为什么MySQL 8.0的默认认证插件更改为caching_sha2_password?

浅明大大_2362

浅明大大_2362

2026-07-24

162人浏览

原创

caching_sha2_password安全性更高,因其采用pbkdf2-sha256(随机salt+5000次迭代)替代mysql_native_password的无盐无迭代sha1(sha1(password)),强制tls或rsa加密传输,并引入内存缓存提升短连接性能。

为什么mysql 8.0的默认认证插件更改为caching_sha2_password?

因为 mysql_native_password 用的 SHA1 已被 NIST 明确要求淘汰,存在哈希碰撞、明文协商、无强制加密通道等实际可利用风险;caching_sha2_password 是 MySQL 团队在安全水位升级前提下给出的务实解法。

SHA1 算法本身已被攻破,不是“理论上不安全”

mysql_native_password 存储的是 SHA1(SHA1(password)),两个用户设相同密码,authentication_string 字段值就完全一样——这等于把密码一致性直接暴露在 mysql.user 表里。实验室级 SHA1 碰撞攻击早已可行,NIST 要求 2026 年起全面停用 SHA1 相关实现。

常见错误现象:2059 - authentication plugin 'caching_sha2_password' cannot be loaded 或客户端直接拒绝握手,其实不是插件“有问题”,而是旧客户端还在尝试走 SHA1 协议路径。

caching_sha2_password 不只是换了个哈希函数

它强制要求 TLS 加密通道,或通过 RSA 公钥加密传输凭证(非 SSL 连接时);每次认证都带随机盐值 + 固定 5000 轮 SHA256 迭代,杜绝彩虹表和离线爆破。

性能影响被误读最多:首次连接耗时 ≈ sha256_password,但缓存命中后(默认 TTL 300 秒)连接开销下降 60%~80%,对 PHP-FPM、Serverless 等短连接密集场景反而更优。

Douyin Keyword Collector
Douyin Keyword Collector

通过浏览器自动化访问抖音首页,在搜索栏输入关键词并在自动化流程中收集相关关键词建议

下载

注意:mysql_native_password 没有缓存概念,每次连接都重算 SHA1,单次快但无安全纵深。

兼容性问题本质是客户端协议栈没跟上

不是插件“不兼容”,而是老客户端压根没实现 caching_sha2_password 的完整握手流程:

  • Navicat ≤ 12.1 默认用旧版 libmysqlclient,不支持 RSA 密钥交换
  • mysql-connector-java 会抛 <code>Unknown system variable 'caching_sha2_password'
  • PDO_MySQL 和 mysqli 扩展(截至 2026 年)仍不支持该插件
  • Docker 镜像若基于 Ubuntu 20.04,自带 client lib 版本常低于 8.0.28,也会卡住

最容易被忽略的一点:改完服务端 ALTER USER 后,Navicat 不关掉重连、或没删旧连接重建,它可能还在用缓存的旧 handshake 参数死循环重试。

真正复杂的地方不在“怎么切回 mysql_native_password”,而在于你得先确认连的是 'root'@'localhost' 还是 'root'@'127.0.0.1' ——这两个账号在 MySQL 里互不等价,plugin 字段各自独立,漏改一个就白忙。

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

2023.10.12

4343

8

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.27

911

4

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

2024.02.23

1129

5

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

2024.03.06

6261

10

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

2024.03.06

3103

4

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

2024.04.07

6240

11

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

2024.04.29

8461

6

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

2024.04.29

1150

5

sql中删除一列的命令是什么
sql中删除一列的命令是什么

在sql中,使用alter table语句可以删除一列,语法为:alter table table_name drop column column_name。想了解更多sql的相关内容,可以阅读本专题下面的文章。

2024.04.29

1012

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL vs MySQL
PostgreSQL vs MySQL

共1课时 | 188人学习