05.MySQL身份验证插件

embedded/2024/9/25 18:16:06/

MySQL身份验证插件

1.问题

MySQL客户端连接数据库的时候,提示这个错误

ERROR 2059 (HY000): Plugin caching_sha2_password could not be loaded: 
/usr/lib64/mariadb/plugin/caching_sha2_password.so: cannot open shared object file: No such file or directory

这个其实是MySQL新的身份验证插件caching_sha2_password的问题

2.介绍

从MySQL8.0.4开始,MySQL默认的身份验证插件从mysql_native_password改为caching_sha2_password。相应地,libmysqlclient也使用caching_sha2_password作为默认的身份验证机制

mysql_native_password_15">3.mysql_native_password身份验证插件

介绍

在这之前MySQL5.6/5.7使用的默认密码插件是mysql_native_password。mysql_native_password的特点是不需要加密的连接。该插件验证速度特别快,但是不够安全,因为,mysql_native_password使用的是于SHA1算法,NIST(美国国家标准与技术研究院)在很早之前就已建议停止使用SHA1算法因为SHA1和其他哈希算法(例如 MD5)容易被破解

改进方案

其实从MySQL 5.6开始就引入了更安全的认证机制:ha256_password认证插件。它使用一个加盐密码(salted password)进行多轮SHA256哈希(数千轮哈希,暴力破解更难),以确保哈希值转换更安全。但是,建立安全连接和多轮hash加密很耗费时间。虽然安全性更高,但是验证速度不够快

工作机制

mysql_native_password作为 MySQL5.6/5.7的默认密码插件其优点是它支持challenge-response(挑战应答方式),这是非常快的验证机制,无需在网络中发送实际密码,并且不需要加密的连接

客户端连接MySQL实例时,首先需要从服务器端获得一个20字节的随机数

此外,mysql_native_password 使用了新的哈希算法进行认证校验。对于用户的原始密码,通过SHA1(SHA1(password))两次哈希计算结果保存在mysql.user表的 authentication_string列中。其中用户密码通过哈希计算后保存,没有加盐(salt)

通过上述这样的处理,MySQL数据库本身已然非常安全。然而,随着时间的推移,目前存在以下两种潜在风险:

  • SHA1哈希算法也已经变得比较容易破解
  • 相同的密码拥有相同的哈希值

SHA1、MD5等之前的哈希算法都已然不再安全,更为安全的SHA256、SHA512哈希算法也已推出。作为数据存储最终承载者,应该使用更新的加密机制机制

4.caching_sha2_password身份验证插件

介绍

MySQL试图结合二者的优点。于是在MySQL8.0.3引入了一个新的身份验证插件caching_sha2_password,作为sha256_password的代替方案,在sha256_password的基础上进行了改进补上了短板,既解决安全性问题又解决性能问题。与此同时sha256_password将退出时代的浪潮。MySQL预计在未来版本中将其删除。使用sha256_password进行身份验证的MySQL账户建议转为caching_sha2_password

建议

因为默认身份验证机制的更改,大家在使用MySQL8.0时候出现了很多相关的问题。网上的大部分教程都是教人改回mysql_native_password验证方式。但是笔者认为,MySQL更改默认插件是为了更好的安全性考虑。如果有MySQL服务要公网上使用,建议还是尽量使用caching_sha2_password作为认证插件

改进点

  • 保存在authentication_string中的哈希值为加盐后的值,即使两个不同用户的密码相同,保存在计算机中的哈希值也不同
  • 哈希算法升级为了更为安全SHA256算法
  • 哈希算法的 round 次数从原来的两次,提升为了5000次,round次数越多,每次计算哈希值的代价越大,破解难度也就越大
  • 用TLS的加密或RSA密钥传输方式从客户端将密码传送到服务端

http://www.ppmy.cn/embedded/7313.html

相关文章

CSS 01

CSS层叠样式表 HTML的局限性 HTML只关注内容的语义,可以做简单的样式,却带来了无限的臃肿和繁琐。 CSS CSS是层叠样式表的简称,也被称之为CSS样式表或级联样式表。CSS也是一种标记语言。   CSS主要用于设置HTML页面中的文本内容(字体、大…

npm ERR! path /Users/apple/.npm/_cacache/index-v5/11/77/cf18d9ab54d565b57fb3

在使用npm时,有时候您可能会遇到类似以下错误的权限问题: npm ERR! path /Users/apple/.npm/_cacache/index-v5/11/77/cf18d9ab54d565b57fb3 npm ERR! code EACCES npm ERR! errno -13 npm ERR! syscall open npm ERR! Error: EACCES: permission denie…

mklink 命令的使用(适用场景:C盘爆满,转移到其他盘)

一、背景 将Oracle数据库安装在D盘,由于磁盘爆满,需要将数据库转移到其他磁盘(如:J盘)。 在移动数据库之后,会出现数据库无法使用的情况,这时该如何解决?经了解,可以使用…

[leetcode] 快乐数 E

:::details 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为: 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。 然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。 如果这个过程 结果为 1…

2024最新云服务器优惠大全,免费领一年云服务器!

本人推荐的服务器全部都是大品牌,不存在跑路等! 所有的小品牌全部都删除了,包括什么9元一年主机,那都不靠谱! 还有其他大品牌,号称优惠,但是一个月好几百,也都删除了,真…

Linux——日志的编写与线程池

目录 前言 一、日志的编写 二、线程池 1.线程池基本原理 2.线程池作用 3.线程池的实现 前言 学了很多线程相关的知识点,线程控制、线程互斥、线程同步,今天我们将他们做一个总结,运用所学知识写一个较为完整的线程池,同时…

JdbcTemplate

文章目录 1.基本介绍1.需求分析2.介绍 2.JdbcTemplate环境搭建1.回到原来的spring项目,导入jar包2.完整jar包3.创建数据库表4.配置文件src/jdbc.properties5.容器文件src/JdbcTemplate_ioc.xml6.测试连接JdbcTest.java 3.JdbcTemplate操作数据库1.配置JdbcTemplate对…

常用渗透测试checklist

该渗透测试checklist包含以下几个模块: 测试大类、测试项、威胁等级、漏洞描述、修复方案 一、认证与授权类 1.密码明文传输 威胁等级:低危 漏洞描述:密码明文传输一般存在于web网站登录页面,用户名或者密码采用了明文传输&am…