【开发日志】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 可分别取通配符 *。