浅谈 MySQL 新的身份验证插件 caching_sha2_password
- GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源。
- GreatSQL是MySQL的国产分支版本,使用上与MySQL一致。
介绍
从 MySQL 8.0.4 开始,MySQL 默认身份验证插件从 mysql_native_password
改为 caching_sha2_password
。相应地,libmysqlclient
也使用 caching_sha2_password
作为默认的身份验证机制。
起因
在这之前 MySQL 5.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 试图结合俩者的优点。于是在 MySQL-8.0.3 引入了一个新的身份验证插件 caching_sha2_password
,作为sha256_password
的代替方案,在sha256_password
的基础上进行了改进补上了短板,既解决安全性问题又解决性能问题。与此同时 sha256_password
将退出时代的浪潮。MySQL 预计在未来版本中将其删除。使用 sha256_password
进行身份验证的 MySQL 帐户建议转为 caching_sha2_password
。
结果
因为默认身份验证机制的更改,大家在使用 MySQL 8.0
时候出现了很多相关的问题。网上的大部分教程都是教人改回mysql_native_password
验证方式 mysql_native_password
。但是笔者认为,MySQL 更改默认插件是为了更好的安全性考虑。如果有 MySQL 服务要公网上使用,建议还是尽量使用 caching_sha2_password
作为认证插件。
示例:使用旧版本客户端连接时报错:
shell> mysql -uroot -p
ERROR 2059 (HY000): Authentication plugin 'caching_sha2_password' cannot be loaded