数据库--Mysql 授权连接ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

一、说明

项目部署环境是linux,今天我一同事在Linux装了个mysql数据库,我问了她要连接账号密码,于是使用Xshell连接到Linux终端,在命令终端本地localhost连接mysql的时候却一直连接不上,操作mysql -uroot -p,输入密码后回车,提示

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

账号密码都是没问题的,Linux终端本地localhost直接连接mysql,也不涉及远程访问、防火墙等问题,就想着出现这个提示要么用户root密码错误,要么用户root没有本地授权。

显然,我的是后者,网上说,给root用户本地localhost授权即可

#GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY 'rootpassword' WITH GRANT OPTION;

命令是这样的,没有错,那么问题来了,关键是我现在连接都连不上mysql,怎么执行。

这时我想到用--skip-grant-tables跳过安全检查,不用密码直接连接mysql,再去执行授权指令即可,具体参见以下章节。

 

二、跳过检查

2.1 修改配置

#vi /etc/my.cnf

'I'键进入插入模式,在[mysqld]后面(临时,后面配置好后要删掉)添加一行配置
skip-grant-tables

Esc 键退回命令模式,Shift+':;'进入低行模式,:wq保存退出

数据库--Mysql 授权连接ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)_第1张图片

参数说明
skip-grant-tables该参数表示mysql连接的时候跳过安全检查

2.2 重启mysql生效

#service mysql restart

2.3 无密码连接 mysql

#mysql -uroot -p
Enter password:

不用输入密码,直接回车,发现连接mysql成功!!!
因为skip-grant-tables就有这个功效,你去掉的话,不输入密码又连接不上了。但是不能保留,实际应用场景很不安全。

三、用户授权

3.1 查看root用户

mysql>use mysql;
mysql>select user,authentication_string,host from user;

发现root用户只开放了指定IP地址223.104.63.178的访问权限,ip地址是我同事的电脑IP,原来是我同事在配置root用户的时候,只给root用户开放了指定IP(同时电脑IP)远程连接到mysql的权限。并没有在终端连接过,只在Windows客户端工具远程连接到mysql进行管理而已。

数据库--Mysql 授权连接ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)_第2张图片

3.2 开放root用户本地访问权限

mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY 'rootpassword' WITH GRANT OPTION;

数据库--Mysql 授权连接ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)_第3张图片

PS:

'root'@'localhost'   连接IP,远程连接则将localhost改成*或者指定的IP地址即可。

IDENTIFIED BY  'rootpassword'     定义的密码可以跟原来的密码一致,也可以不同,因为这是两条不同的记录

刷新权限后生效
mysql>flush privileges;

3.3 重新连接mysql

# mysql -uroot -p
Enter password:

输入密码,回车后连接成功!!!!

 

最后,记得把/etc/my.cnf配置中的skip-grant-tables删除或注释,因为无密码直接连接mysql很不安全!!!
 

 

你可能感兴趣的:(P1:数据库)