启用远程MySQL连接:ERROR 1045 (28000):拒绝用户访问
启用远程MySQL连接:ERROR 1045 (28000):拒绝用户访问
MySQL 5.1.31 在 Windows XP 上运行。
从本地 MySQL 服务器(192.168.233.142)可以用以下方式连接为 root 用户:
> mysql --host=192.168.233.142 --user=root --password=redacted
从远程机器(192.168.233.163)可以看到 mysql 端口是开放的:
# telnet 192.168.233.142 3306
Trying 192.168.233.142...
Connected to 192.168.233.142 (192.168.233.142).
但是当尝试从远程机器连接到 mysql 时,我收到以下错误:
# mysql --host=192.168.233.142 --user=root --password=redacted
ERROR 1045 (28000): Access denied for user 'root'@'192.168.233.163' (using password: YES)
我在 mysql.user 表中只有 2 个条目:
Host User Password
--------------------------------------
localhost root *blahblahblah
% root [same as above]
我还需要做什么来启用远程访问?
编辑:
如 Paulo 所建议,我尝试用特定 IP 的条目替换了 % 的 mysql.user 条目,所以我的用户表现在如下所示:
Host User Password
------------------------------------------
localhost root *blahblahblah
192.168.233.163 root [same as above]
然后我重新启动了机器,但问题仍然存在。
在授予远程访问权限后,我遇到了相同的错误,直到我执行了以下操作:
从/etc/mysql/my.cnf
找到文件。
在较新版本的mysql中,该文件的位置是/etc/mysql/mysql.conf.d/mysqld.cnf
# Instead of skip-networking the default is now to listen only on # localhost which is more compatible and is not less secure. #bind-address = 127.0.0.1
(将此行注释掉:bind-address = 127.0.0.1
)
然后运行service mysql restart
。
或者将其更改为bind-address = 0.0.0.0
只注释掉bind-address
对我无效。只有bind-address = 0.0.0.0
或bind-address = <server_ip>
有效。
默认情况下,MySQL服务器禁用远程访问。要为用户提供远程访问权限,需要按照以下步骤操作:
1. 进入MySQL的bin文件夹或将其添加到PATH
环境变量中;
2. 使用mysql -uroot -proot
命令登录root用户(根据实际情况输入root用户的密码);
3. 登录成功后,会显示mysql>
提示符;
4. 为该用户提供完全访问权限。
具体命令如下:
GRANT ALL PRIVILEGES ON *.* TO 'username'@'IP' IDENTIFIED BY 'password';
其中,IP是要允许远程访问的IP地址,如果使用%
表示允许任何IP地址进行远程访问。
示例:
C:\Users\UserName> cd C:\Program Files (x86)\MySQL\MySQL Server 5.0\bin C:\Program Files (x86)\MySQL\MySQL Server 5.0\bin>mysql -uroot -proot mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root'; Query OK, 0 rows affected (0.27 sec) mysql> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.25 sec)
以上是为其他用户授予远程访问权限的示例:
mysql> GRANT ALL PRIVILEGES ON *.* TO 'testUser'@'%' IDENTIFIED BY 'testUser'; Query OK, 0 rows affected (0.00 sec) mysql> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.00 sec)
希望这能帮到你。
对于这些详细信息的+1,确实帮助我了解到0 rows affected
是正常的。此外,建议在最后执行service mysqld restart
命令。[有时mysqld
只是mysql
]
注意:对于版本5.6+,使用"grant all on..."(不包含privileges)。
原文链接:https://stackoverflow.com/questions/19101243
问题出现的原因是访问被拒绝,解决方法是通过将特定IP或任意IP授权给特定用户,并刷新权限或重新启动MySQL服务器。以下是详细的解决方法:
要允许远程MySQL连接,需要以root身份执行以下命令:
GRANT ALL PRIVILEGES ON *.* TO '用户名'@'IP' IDENTIFIED BY '密码' with grant option;
其中,IP是要允许访问的IP地址,用户名是用于连接的用户,密码是相应的密码。如果要允许从任意IP访问,只需将IP替换为%
即可。然后,只需执行以下命令:
FLUSH PRIVILEGES;
或者重新启动MySQL服务器即可。
如果没有本地MySQL客户端,还有其他方法可以实现吗?
如何取消特定IP的权限?
stackoverflow.com/a/21151255/470749也对我有所帮助,因为我猜测我的bind-address设置需要被注释掉。仅授予远程权限是无法使其正常工作的。
在答案中没有说明,但是将PASSWORD
替换为账户密码。我尝试了只更改USERNAME
和IP
,但在更改PASSWORD
之前,它对我没有起作用。
完成此操作后,还要按照以下答案所述进行操作:stackoverflow.com/a/21151255/445438
最少需要授予哪些权限以仅允许登录?
在MySQL 8.0中会出现语法错误。查看以下链接以获取修正方法:stackoverflow.com/questions/50177216/…
还可以使用通配符%
来匹配IP地址。例如:GRANT ALL PRIVILEGES ON . TO '用户名' @ '10.1.1.%' IDENTIFIED BY '密码' with grant option;
要允许任意IP访问,使用.... TO '用户名' @ '%' IDENTIFIED BY ...
这是非常糟糕的建议!这样做将允许用户执行任何操作,甚至可能删除数据库等。应该只授予用户所需的权限,可能仅需要在一个数据库中的一个表上授予GRANT SELECT
权限。