MySQL 远程连接-拒绝用户“用户名”@“localhost”访问(使用密码:是)

MySQL 远程连接-拒绝用户“用户名”@“localhost”访问(使用密码:是)

我正在建立与 MySQL 服务器的远程连接,但无论我尝试什么,我都会收到来自远程服务器的访问被拒绝错误。

我通过以下方式添加了用户:

CREATE USER 'username'@'REMOTE_IP_ADDRESS' IDENTIFIED BY '***';

然后我授予了权限:

GRANT ALL PRIVILEGES ON databasename.* to username@REMOTE_IP_ADDRESS;

MySQL 服务器上我的用户表显示(除其他内容外):

+---------------+--------------------+
| user          | host               |
+---------------+--------------------+
| username      | REMOTE_IP_ADDRESS  |
+---------------+--------------------+

如果我向用户显示授权,我会得到:

+------------------------------------------------------------------------------------+
| Grants for username@REMOTE_IP_ADDRESS
+------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'username'@'REMOTE_IP_ADDRESS' IDENTIFIED BY PASSWORD '***'
| GRANT ALL PRIVILEGES ON `databasename`.* TO 'username'@'REMOTE_IP_ADDRESS'
+------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)

然后在远程服务器上使用:

mysql -u username -p DB_SERVER_IP

并收到错误消息:

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

我已经执行了“刷新权限”,但仍然无法连接 - 我注意到错误是 username@localhost,而我没有为 username@localhost 设置任何权限,但我以前从未这样做过。我在同一台服务器上还有其他一些远程帐户,但它们都没有 @localhost,因为它们只能在本地连接。

我遗漏了什么?我是否忘记做某事或我还可以检查什么?

答案1

错误消息表明您根本没有连接到远程 MySQL,而是连接到本地主机。请确保使用选项连接-h到远程服务器。

mysql -u username -h DB_SERVER_IP

答案2

为了简单起见,我们这样说:

计算机 A = 保存 MySQL DB。IPv4= 192.168.11.1

计算机 B= 有一个 Eclipse 程序想要连接到计算机 A 并对架构进行操作。Ipv4= 192.168.22.2


在计算机A上执行以下操作:

看起来您正在尝试创建一个名为“username”@“192.168.22.2”的新用户,但另一个名为“username”@“localhost”的用户却妨碍了/抢占了先机。

执行此命令查看用户:

SELECT user,host FROM mysql.user;

您应该看到两个条目:

1)用户=用户名,主机=本地主机

2)用户=用户名,主机=192.168.22.2

这些命令也是如此:

DROP User 'username'@'localhost';
DROP User 'username'@'192.168.22.2';

注意,如果您看到“用户名”@“%”用户,也请删除该行。

重新启动 MySQL Workbench

然后再次执行原来的命令:

CREATE USER 'username'@'192.168.22.2' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON databasename.* TO 'username'@'192.168.22.2';

我不明白为什么您使用“***”作为密码,所以我将其替换为“密码”。


然后转到计算机 B 并打开命令提示符/终端。输入以下内容,您应该可以连接到计算机 A。如果无法连接,请检查计算机 A 的防火墙的入站规则,并检查 MySQL 服务是否在计算机 A 上运行。

mysql --host=192.168.11.1 --user=username --password=password

(确保已将 mysql 设置为环境变量,否则命令提示符将无法理解“mysql”命令)

有用的故障排除方法:关闭计算机 A 上的所有防火墙规则。从计算机 B 的命令提示符/终端执行“ping 192.168.11.1”或“telnet 192.168.11.1 3306”。

答案3

您需要单独添加 localhost 用户。您可以在一个命令中完成此操作(而不是两个)。

GRANT ALL on database.* to 'user'@'localhost' identified by 'paswword';

如果您想添加用户以便它可以从任何地方连接(不太安全),请使用以下命令:

GRANT ALL on database.* to 'user'@'%' identified by 'password';

答案4

提示:

注释掉 pid 和 socket 文件,如果你无法连接到服务器.. mysql 可能连接了不正确的 pid 和/或 socket 文件,所以当你尝试通过命令行连接到服务器时“看起来” 在不正确的 pid/socket 文件...

### 如果无法连接到服务器,请注释掉 pid 和 socket 文件.. 
#pid-file=/var/run/mysql/mysqld.pid #socket=/var/lib/mysql/mysql.sock

相关内容