MySQL5.7旧密码哈希转换为MySQL8 caching_sha2_password格式问询
MySQL 5.7 迁移至8.0 旧密码哈希转换问题解答
核心结论
无法直接将mysql_native_password格式的旧密码哈希转换为caching_sha2_password格式的哈希
原因说明
两种认证插件的密码哈希均为单向不可逆算法:
mysql_native_password采用两次SHA1哈希生成固定长度的哈希值,就是你看到的*开头的41位字符串caching_sha2_password采用加盐SHA256哈希,安全性远高于旧算法
因为无法从旧哈希值反推用户的明文密码,所以不存在直接转换的技术可能性。
可行解决方案
方案1:全量升级为新认证插件(官方推荐)
通知所有使用旧密码的用户重置密码,执行以下SQL即可完成用户插件升级:
ALTER USER 'your_username'@'your_host' IDENTIFIED WITH caching_sha2_password BY 'new_user_password';
你也可以先修改MySQL配置文件my.cnf添加以下参数,后续新建用户会默认使用新认证插件:
default_authentication_plugin = caching_sha2_password
方案2:临时兼容旧认证方式
如果暂时无法推动用户修改密码,可以为指定用户保留旧的认证插件,无需知道明文密码即可直接用旧哈希值配置:
ALTER USER 'your_username'@'your_host' IDENTIFIED WITH mysql_native_password AS '*126CFB940B0843713B19A6C21B99C0F1F9F3AFB6';
迁移前置检查
迁移前先执行以下SQL统计所有使用旧认证插件的用户,避免遗漏:
SELECT user, host, plugin FROM mysql.user WHERE plugin = 'mysql_native_password';
注意事项
升级用户的认证插件前,请确认应用端使用的MySQL驱动已支持caching_sha2_password,例如Java的mysql-connector-java需要升级到5.1.46+或8.0.x系列版本,否则会出现连接认证失败的问题。
内容的提问来源于stack exchange,提问作者Nick
相关产品推荐
相关产品推荐

