java.sql.SQLException: Access denied for user 'root'@'localhost'

原由:ERROR 1698 (28000): Access denied for user 'root'@'localhost'

环境: ubuntu 18.04 + Eclipse +mysql 5.7

1. 学习 sping boot 到了 javax.persistence.Entity 出错!而后倒回去学习 JPA 
2. 先是遇到了 SSL 错误 ,简单加上 url=jdbc:mysql://127.0.0.1:3306/framework?characterEncoding=utf8&useSSL=true ,或者 url=jdbc:mysql://127.0.0.1:3306/framework?characterEncoding=utf8&useSSL=false
3. 以前学习 java 和 jsp 的时候,都跳过去了 java 链接 mysql 部分,如今回头去补上
4. 遇到错误: ERROR 1698 (28000): Access denied for user 'root'@'localhost' 
5. 从 jsp 退回到 java ,怎么调整 url 和 property 都无论用,退回到 mysql
6. 由于现安装了 mysql 5.7 ,每次启动 mysql 时习惯性的加上了 sudo,没有遇到错误,可是,如今在 eclipse 里面,显然是不可能去 sudo的
sudo mysql -uroot -p wzh20190228 正确!
mysql -uroot -p wzh20190228 也是错误!
ERROR 1698 (28000): Access denied for user 'root'@'localhost'
7. 因此问题回到了 mysql 的 root

参考

http://www.javashuo.com/article/p-qjhgwbqx-u.html https://blog.csdn.net/a1027805380/article/details/70990821 http://www.javashuo.com/article/p-fwufxqhz-eh.htmlhtml

一、找到系统自动产生的客户端帐户

sudo cat /etc/mysql/debian.cnf
内容以下
	# Automatically generated for Debian scripts. DO NOT TOUCH!
	[client]
	host     = localhost
	user     = debian-sys-maint
	password = Ev6UOKtD58F3kQys
	socket   = /var/run/mysqld/mysqld.sock
	[mysql_upgrade]
	host     = localhost
	user     = debian-sys-maint
	password = Ev6UOKtD58F3kQys
	socket   = /var/run/mysqld/mysqld.sock

二、使用这个帐户登陆 mysql

1. 无需中止 mysql 服务
2. mysql -u debian-sys-maint -p
	输入以上系统产生的密码 (个人是 Ev6UOKtD58F3kQys)
3. 切换到 mysql
	mysql>use mysql;
		...
		Database changed

4. mysql> show tables;
		...
		user

5. mysql> select user, plugin from mysql.user;
	+------------------+-----------------------+
	| user             | plugin                |
	+------------------+-----------------------+
	| root             | auth_socket           |
	| mysql.session    | mysql_native_password |
	| mysql.sys        | mysql_native_password |
	| debian-sys-maint | mysql_native_password |
	| root             | mysql_native_password |
	+------------------+-----------------------+
	5 rows in set (0.01 sec)

6. 重设 root 密码 和认证方式 (这一步是关键)
	update mysql.user set authentication_string=PASSWORD('Wwzzhh[@123](https://my.oschina.net/u/9520)'),plugin='mysql_native_password' where user='root';
返回结果:
Query OK, 1 row affected, 1 warning (0.00 sec)
Rows matched: 2  Changed: 1  Warnings: 1

** 密码要符合规定!我老是想简单为 12345678,反正是学习用
	ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
	
7. mysql> flush privileges;
8. quit
9. mysql -u root -p
 
** 以前学习的都是进入安全模式以后,重设 root 密码,老是无论用!
** 感谢 https://www.cnblogs.com/leolztang/p/5094930.html 做者!
** 问题的关键不在 root 密码 ,由于 sudo mysql -uroot -p wzh20190228 是能够登陆的
** 问题关键在于 root 帐户的认证方式:auth_socket

三、回到 java 程序

在这里插入图片描述

四、回到 jsp 程序

后续: JPA 、Spring boot 待处理

相关文章
相关标签/搜索