MySQL 8.4 LTS 开始默认使用caching_sha2_password
认证插件,来取代不太安全的mysql_native_password
认证插件。网上很多的文章解决这个问题的方法,是启动MySQL的时候,加上--mysql-native-password=ON
选项,以回退并继续使用mysql_native_password
认证插件。然而,在MySQL 9.0以后,mysql_native_password
认证插件不再被支持。所以更好的解决办法,还是彻底更改认证方式为caching_sha2_password
。
首先升级MySQL到8.4+后正常启动,默认认证模块会变更为caching_sha2_password
。
DROP USER 'foo'@'%';
CREATE USER 'foo'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON BAR.* TO 'foo'@'%';
FLUSH PRIVILEGES;
注意:
1. 只是 DELETE FROM mysql.user where User="foo"; FLUSH PRIVILEGES;
可能会导致CREATE USER
失败,需要先DROP USER
。
2. 如果升级后无法登陆,可以启动MySQL的时候加上--skip-grant-tables
以临时跳过认证。
3. 对于root
用户,可以加上WITH GRANT OPTION
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
客户端这边,以PHP为例,需要确认支持caching_sha2_password
认证插件。
<?php
phpinfo();
?>
会显示:
mysqlnd - Loaded plugins:
auth_plugin_caching_sha2_password
如果不支持,请升级版本。