首页 > 解决方案 > MySQL Workbench - 没有端口转发的“拒绝访问”

问题描述

我在我的 2011 macbook pro 上运行 mysql 工作台。我用它连接到远程 ubuntu 服务器上的 mysql 数据库。我能够从我的 macbook pro 连接到远程服务器上的 mysql 数据库没有问题,直到我不得不在我的 mac 上进行硬重启。之后我会得到下面的错误。

但是,一旦我在我的 mac 上为指定用户使用以下命令转发端口,它就可以使用 mysql 工作台连接到远程服务器上的数据库。这告诉我们从我的 mac 连接到远程服务器上的数据库的问题是什么?我宁愿不为我想从我的 mac 登录的每个用户移植。有没有人建议如何解决这个问题?

命令:

ssh -N -f -L localhost:3306:localhost:3306 username@192.168.50.122

以前的错误:

Failed to connect to MySQL at xxx.xxx.xx.xxx:3306 with user username Access denied for user 'username'@'xxx.xxx.xx.xxx' (using password: YES)

更新:

当我尝试使用 IP 地址查找用户名的授权时,我没有找到它们并收到下面的错误消息。当我尝试查找 sql_show_grants 表时,我收到另一条错误消息。当我尝试使用 '%' 查找相同的用户名时,我会在下面找到所有授权。那么用户仍然无法从任何IP连接是否有意义?还有什么我需要做的吗?

show grants for 'username'@'xxx.xxx.xx.xxx';
ERROR 1141 (42000): There is no such grant defined for user 'username' on host 'xxx.xxx.xx.xxx'



SELECT sql_grants FROM common_schema.sql_show_grants;
ERROR 1049 (42000): Unknown database 'common_schema'





show grants for 'username'@'%';
+--------------------------------------------------------------+
| Grants for username@%                                      |
+--------------------------------------------------------------+
| GRANT USAGE ON *.* TO `username`@`%`                       |
| GRANT ALL PRIVILEGES ON `finances`.* TO `username`@`%`     |
| GRANT ALL PRIVILEGES ON `geographical`.* TO `username`@`%` |
| GRANT ALL PRIVILEGES ON `realestate`.* TO `username`@`%`   |
| GRANT ALL PRIVILEGES ON `sandbox`.* TO `username`@`%`      |
| GRANT ALL PRIVILEGES ON `stocks`.* TO `username`@`%`       |
+--------------------------------------------------------------+

标签: mysqlmacosmysql-workbenchubuntu-server

解决方案


您尝试连接的帐户无权从您的客户端 IP 地址访问服务器。如果您使用 SSH 端口转发,则您是从 localhost(从服务器到服务器)连接的,因此应用了不同的权限方案。

在 MySQL 服务器上,以管理员身份启动 mysql shell,然后运行

SHOW GRANTS FOR 'username'@'xxx.xxx.xx.xxx'

(将 'username'@'xxx.xxx.xx.xxx' 替换为错误消息中显示的内容)。

如果它没有显示任何结果,则您的用户没有来自相应 IP 地址的任何权限,您需要更改或创建它。如果它确实显示权限,请确保 SELECT 在它们下方。

如果您找不到您的用户,请尝试查看所有授权:

SELECT sql_grants FROM common_schema.sql_show_grants;

如果您说它以前有效,则可能是原始用户添加了一个动态 IP 地址,该地址在您的客户端重新启动后发生了变化。如果是这种情况,并且最后一条语句显示您的用户使用了错误的 IP 地址,请使用以下命令对其进行更新:

RENAME USER 'username'@'ipaddress1' TO 'username'@'ipaddress2';

如果您使用动态 IP 地址并希望从所有源地址授予用户访问权限,您可能需要考虑使用 '%' 而不是 'ipaddress2'。这是否是一个安全问题,取决于您的环境。


推荐阅读