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 

参考

https://www.cnblogs.com/leolztang/p/5094930.html
https://blog.csdn.net/a1027805380/article/details/70990821
https://www.cnblogs.com/koocookie/p/7245197.html

1、找到系统自动产生的客户端账户

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

2、使用这个账户登录 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'),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

3、回到 java 程序

java.sql.SQLException: Access denied for user 'root'@'localhost'_第1张图片

4、回到 jsp 程序

java.sql.SQLException: Access denied for user 'root'@'localhost'_第2张图片

5、另外创建一个用户

** ubuntu 1804 上 mysql 安装后, root 不用通过密码连接
** 通过 root 创建新用户,新数据库并授权新用户
	1. sudo mysql -u root -p
	2.  create user dog identified by 'Wwzzhh@123';
	3.  CREATE DATABASE wzh20190305;
	4.  GRANT ALL ON *.* TO 'dog'@'%';
	
	然后,使用 用户 dog 进行后续各种操作,新建的用户插件方式是 mysql_native_password,无需修改 root 插件认证方式
	
	 mysql -u dog -p 

你可能感兴趣的:(开发)