在使用mysql数据库进行远程登录时遇到了ERROR 1045 (28000): Access denied for user 'root'@'NJ-YF-1407-03' (using password: YES)。 检查了一下密码,发现没有输错。那么到底是怎么回事呢?
由于mysql服务安装在ip地址为172.16.210.229的主机上,所及我就远程登陆了该主机,发现登录命令 mysql -uroot -p -h 172.16.210.229报了同样的错误,只能使用mysql -uroot -p -h 127.0.0.1 或者mysql -uroot -p等默认登录方式登录。使用navicat或者heidiSQL等数据库连接工具亦无法登陆。
在此记录一下我解决这个问题的过程:
首先,由于我的mysql是mysql-5.7.17安装版的,所以网上的那些关于修改my.ini配置文件的方法就不适用了。所以,解决问题的关键落在了用户权限上。
1.使用root用户登录mysql本机,使用默认命令登录(即 mysql -uroot -p) ,不指定主机地址默认登录本地服务。登录后,查询数据库名为"mysql"中的表“user”,此表存储了mysql登录用户的用户名、密码、相关权限等信息。
mysql> select host,user from user;
+------------+--------------+
| host | user |
+------------+--------------+
| localhost | lujx |
| localhost | mysql.sys |
| localhost | tempuser |
| localhost | root |
+------------+---------------+
数据库中只有root'@'localhost',这就意味着这个root用户只能在localhost主机上登录,使用远程登录或者使用-h 172.16.210.229就没有权限,所以会被拒绝.所以要想实现在其他主机上登录该mysql服务。
2.解决此类问题有两种方法
a).修改用户的host
在mysql本地登录超级权限账号后,执行如下命令:
mysql>use mysql;
mysql>update user set host = '%' where user = 'root';
此时root用户支持任何主机可以登录。
b).创建root@‘%’用户
使用root超级权限用户登录系统后,注意,此处是使用‘root’@‘localhost'方式登录。执行命令
mysql>create user 'root'@'%' identified by 'yourPassword' , yourPassword是你自定义的密码。再执行命令:
mysql>flush privileges .用于刷新生效,
由于我要创建的是一个超级权限用户,所以我要授予该用户最高权限。执行命令
mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'yourPassword' WITH GRANT OPTION; 用于授予'root'@'%'用户最高权限。
然后就可以从任何主机登录root账号了。
当然,如果需要root用户只能从特定的主机登录,只需要修改创建用户命令中的主机名即可,例如:指定root用户只能在172.16.210.121主机登录,则执行以下命令即可:
mysql>create user 'root'@'172.16.210.121' identified by 'yourPassword' , yourPassword是你自定义的密码。再执行命令:
mysql>flush privileges .用于刷新生效,
mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'172.16.210.121' IDENTIFIED BY 'yourPassword' WITH GRANT OPTION; 用于授予'root'@'%'用户最高权限。执行此操作后,'root'@'172.16.210.121'用户只能在172.16.210.121主机登录远程mysql服务。