Mysql_native_password 设计:

MySQL添加了对身份验证插件的支持,该插件现在称为mysql_native_password。该mysql_native_password插件使用SHA1哈希
将密码(SHA1(SHA1(password)))存储在mysql.user表中
验证用户,该插件的一个优点是,它允许使用质询-响应机制进行身份验证,从而可以在未加密的通道上验证客户端的身份,而无需发送实际密码。

随着时间的流逝,我们从身份验证方案的角度确定了需要改进的几个方面。
  • 在将值存储在数据库中时,密码的转换必须使用盐(增加的因素)。没有它,两个具有相同密码的帐户将具有相同的哈希值。尽管这并不能显示实际的密码,但确实提供了有关用户使用密码的线索,并限制了暴力攻击和获取密码所需的工作。
  • 使用蛮力攻击更难破解存储的密码。最好在存储密码时使用许多(数千)轮哈希。
  • 使用更强大的哈希机制。随着技术的发展,SHA1和其他哈希算法的前身(例如MD5)已被证明非常容易破解。注意:NIST 在2011年已弃用。因此,如果您可以从mysql.user表中获取散列,或者通过嗅探未加密的通道,则可以对这些密码进行快速反向工程和破解,尤其是当密码较短(少于8个字符)时。另请参阅FIPS 180-4。
  • 对身份验证阶段和密码使用不同的哈希方案。在这两种情况下,mysql_native_password插件都使用类似的转换(SHA1(SHA1(password)))。

为了克服这些限制,从MySQL-8.0.3开始, 引入了一个新的身份验证插件 caching_sha2_password。从 MySQL-8.0.4开始,此插件成为MySQL服务器的新默认身份验证插件。通过caching_sha2_password身份验证,我们可以解决上述问题,同时确保不影响性能。许多使用MySQL的应用程序以很高的频率连接和断开连接。

MySQL caching_sha2_password的设计重点是:

  • 使用SHA-2哈希机制来转换密码。具体来说,它使用SHA256。
  • 生成哈希时,每个密码使用20字节长的盐。由于盐是一个随机数,即使两个用户使用相同的密码,转换过程的最终结果也将完全不同。
  • 为了使使用蛮力机制更难以尝试和猜测密码,在将最终转换存储在mysql.user表中之前,对密码和盐进行了5000轮SHA2散列。

两种操作方式:

  • COMPLETE:要求客户端安全地发送实际密码(通过TLS连接或使用RSA密钥对)。服务器生成5000轮哈希,并与mysql.user中存储的值进行比较。
  • FAST:允许使用SHA2哈希的基于质询-响应的身份验证。高性能和安全性在同一时间。

DBA可以强制数据库客户端定期使用COMPLETE模式来确定实际密码的认知。通过使用不同轮回数的哈希将密码存储和身份验证脱钩。即使有人可以访问这两个密码,也无法在实际可行的时间内使用此信息来推断密码或获取密码的sha2哈希。蛮力破解8字符长的密码以及5000轮咸化哈希值将花费很长时间。比任何密码到期策略(甚至最宽松的策略)更长的时间。较长的密码只会使事情变得更加困难。

下表比较了mysql_native_password和caching_sha2_password。

除了新插件外,还添加了一些功能来防止尝试识别用户信息并减轻与弱密码相关的风险:
1、支持TLS连接,无需任何额外的努力(服务器端支持和客户端端支持)以确保默认情况下连接是安全的
2、CREATE USER / ALTER USER提供了几个 选项来指定密码管理策略
3、控制可以和不能用作密码的内容–长度,字符复杂度等。
4、减慢蛮力尝试猜测密码会增加延迟以及设置最大尝试限制
5、用随机一次密码重置密码。
6、防止用户枚举的其他措施

这些功能与caching_sha2_password结合使用,可增强用户帐户抵御密码攻击的能力。

另外,mysql模式的数据可以在静态时进行加密(InnoDB加密, 二进制日志加密)。这样可以保护敏感数据,例如密码哈希,以防止未经授权的文件访问。这在OS /文件系统中隐藏了许多细节。FYI – DBA(具有所需特权集的用户,例如mysql.user表上的SELECT)可以看到此哈希数据,而与使用静态数据加密方案无关。话虽如此,反向工程师密码的费用仍然很高。

如果仅凭安全性不足以促使您升级到caching_sha2_password,那么另一项商业动机就是遵守法规。大多数法规禁止将sha1,md5和其他弱密码用于密码或其他用途。(HIPAA,GDPR等)

在这里总结一下:

  • 如果您使用的是mysql_native_password,请尽快计划迁移到caching_sha2_password或支持与外部身份验证服务器集成的 企业身份验证插件之一。SHA1不够安全,切换也不困难。
  • 对mysql.user表的访问应尽可能严格。即使它不存储实际的密码,该表中的信息也非常敏感-尤其是密码哈希。实际上,无论您在何处存储此类哈希-无论是在MySQL数据库中还是在外部身份验证服务器(例如LDAP服务器)上,都必须始终对其进行保护。 OpenLDAP文档 很好地阐明了这一点:
  • 使用MySQL提供的密码策略功能来控制密码生命周期。
  • 使用MySQL提供的控件来防止对密码的暴力攻击。
  • 在mysql模式上,最好在所有表上使用InnoDB加密,以及二进制日志加密,以保护静态数据免受未经授权的访问。
  • 始终使用加密的连接:在HA拓扑中是服务器-客户端通信还是服务器-服务器通信。仅加密静态数据是不够的。数据在传输过程中必须受到保护。
  • 始终通过加密备份来保护备份,以避免数据泄漏

MySQL新密码机制介绍caching_sha2_password相关推荐

  1. mysql新密码认证_MySQL原生密码认证

    基于密码的身份认证包括了两个部分: - 服务器端认证信息的存储 - 密码的认证过程 基于密码的身份认证有一个原则:仅使用人知道密码.密码不能被存储在认证服务器中,在认证过程中也不能通过网络明文传输.因 ...

  2. mysql数据库的新特性_【数据库】MySQL新特性归档介绍

    MySQL 8.0.17发布了,看了下release note,发现果真如之前预期的那样,恢复了redo log归档(redo log archiving)功能.之所以说是"恢复" ...

  3. 浅谈 MySQL 新的身份验证插件 caching_sha2_password

    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. GreatSQL是MySQL的国产分支版本,使用上与MySQL一致. 介绍 从 MySQL 8.0.4 开始,MySQL ...

  4. 新特性解读 | MySQL 8.0 新密码策略(上)

    作者:杨涛涛 资深数据库专家,专研 MySQL 十余年.擅长 MySQL.PostgreSQL.MongoDB 等开源数据库相关的备份恢复.SQL 调优.监控运维.高可用架构设计等.目前任职于爱可生, ...

  5. Mysql忘记密码设置新密码

    Mysql忘记密码设置新密码 公司开发服务器上的陈年Myqsl不知道登录信息了,没密码但是有数据,所以进行了一次重置密码,过程记录了下来. 1.linux下找到my.cnf配置文件 Centos系统该 ...

  6. mysql设置或者修改新密码

    mysql设置或者修改新密码 mysql默认密码为空,如何设置新密码或者忘记密码后找回密码呢? 打开mysql安装目录下的my.ini配置文件(我这里是my.ini,可能名字不一样没关系只要.ini格 ...

  7. MySql忘记密码,本地服务重置新密码

    文章目录 1.停掉MySql服务 2.跳过密码授权登录 3.重置密码 4.其他方法,针对unix 异常情况 1.停掉MySql服务 2.跳过密码授权登录 (1)MySql8.0版本 windows管理 ...

  8. mysql修改密码后 新密码不生效_mysql修改密码后无法连接

    每隔一段时间用到mysql就会遇到这个问题,每次解决完之后就忘了,下次继续挠头. 百度一下,有用的答案也不多,于是终于勤快下过来mark了. 正确的修改密码步骤: ①update mysql.user ...

  9. mysql更改密码的sql语句_修改mysql登录密码与sql语句介绍

    修改mysql登录密码: 在使用数据库服务器过程中可能会因为种种原因忘记了登录密码,或者需要使用别人的数据库服务器,别人却忘记了登录密码等等. 忘记密码有两种方式可以解决,一是通过sql语句修改登录密 ...

最新文章

  1. 2017.8.12 联考题
  2. jQuery表单校验jquery.validate.js的使用
  3. netty系列之:Event、Handler和Pipeline
  4. K/3 MRP运算数据不准的原因及解决方案
  5. https://blog.csdn.net/cscscscsc/article/details/50
  6. c语言巩固,巩固一下C语言中的指针
  7. git将本地仓库推送到远程仓库
  8. 基于MDC300的神经网络开发
  9. 思考小型管理软件的诸多问题:附美萍部分客户的销售统计表
  10. 2018年最新税收分类编码_这是我们在2018年推出的所有免费编码课程
  11. AD15批量修改丝印的方法
  12. 视频水印素材 md5修改
  13. php hprose扩展1.5.5,基于Hprose for PHP 1.5.6、Yii2.0.7的RPC的基本实现流程
  14. 电影海报的多标签分类
  15. Oracle Client卸载
  16. 网页制作HTML代码全攻略
  17. Installshield 安装包安装过程中遇到的报错(一)
  18. 使用Python二次开发S3D 查询当前选择元素基本信息
  19. POI导出Excel(二)
  20. ADS一键清理工具,解决ads2020卸载不干净没法安装新的ads 解决ads安装时说存在上一个版本 解决ads安装提示没有卸载干净 ads2017卸载时删不尽 ads2019删除不干净 注册表

热门文章

  1. 一招教你如何高效批量导入与更新数据
  2. python:将遥感数据使用matplotlib库绘制成图片
  3. Linux运维工程师必知的服务器备份工具:Rsnapshot
  4. 2008 April 17th Thursday (四月 十七日 木曜日)
  5. Collections的copy()方法和ArrayList的大小问题
  6. [网络安全自学篇] 三十八.hack the box渗透之BurpSuite和Hydra密码爆破及Python加密Post请求(二)
  7. 最简单方式利用Python演奏字母歌
  8. ASP.Net MVC开发基础学习笔记(4):校验、AJAX与过滤器
  9. python -- (pynsq)
  10. Mybatis之代码生成器配置文件详解