【开发日志】ubuntu 16 下 MySQL Access denied for user 'root'@'localhost'

问题背景

在 ubuntu 16 系统中部署 Tomcat 发布 SpringBoot 项目,运行起来后,前端网页访问后台出现报错:java.sql.SQLException: Access denied for user 'root'@'localhost'.

解决方法

因为密码是没问题的,所以不考虑密码错误的原因。
经搜索,再此篇文章找到:https://blog.ndk.name/change-mysql-server-authentication-plugin-for-root-user/ 一种可能情况:MySQL 的默认授权模式为 auth_socket 或者是 unix_socket 而不是密码形式进行登录授权的,所以要改变授权方式。
查看 MySQL 系统用户表:

SELECT user, authentication_string, plugin, host from mysql.user;

修改 plugin 字段为 mysql_native_password:

 UPDATE mysql.user SET plugin = 'mysql_native_password', authentication_string = PASSWORD('your_password') WHERE User = 'pc';

之后执行语句刷新一下
FLUSH PRIVILEGES;

注意我没有修改 root 用户,而是新建了两个用户,修改了这两个用户的 plugin 字段。
补充:添加用户方法:

 CREATE USER 'test'@'localhost' IDENTIFIED WITH mysql_native_password;

通过修改好 user 的 plugin 字段类型,设置好密码后, 项目就可以顺利访问到数据库了。问题解决。另外如果是新创建的用户,记得授予对要访问的数据库的权限:

grant all privileges on database_name.table_name to 'test'@'localhost';

database_name 和 table_name 可分别取通配符 *。

posted @ 2021-08-22 17:26  Skipper-  Views(101)  Comments(0Edit  收藏  举报