启用远程MySQL连接:ERROR 1045 (28000):拒绝用户访问

14 浏览
0 Comments

启用远程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]

然后我重新启动了机器,但问题仍然存在。

0
0 Comments

在授予远程访问权限后,我遇到了相同的错误,直到我执行了以下操作:

/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.0bind-address = <server_ip>有效。

0
0 Comments

默认情况下,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

0
0 Comments

问题出现的原因是访问被拒绝,解决方法是通过将特定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替换为账户密码。我尝试了只更改USERNAMEIP,但在更改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权限。

0