【问题标题】:MySQL Workbench - 'Access Denied' without port forwardingMySQL Workbench - 没有端口转发的“拒绝访问”
【发布时间】:2021-10-21 07:32:35
【问题描述】:

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

但是,一旦我在我的 mac 上为指定的用户使用以下命令转发端口,它就可以使用 mysql workbench 连接到远程服务器上的数据库。这告诉我们从我的 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`@`%`       |
+--------------------------------------------------------------+

【问题讨论】:

    标签: mysql macos mysql-workbench ubuntu-server


    【解决方案1】:

    您尝试连接的帐户无权从您的客户端 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”。这是否是一个安全问题,取决于您的环境。

    【讨论】:

    • 感谢您回复我。我尝试了你的建议,并用我发现的内容对我的原始帖子进行了更新。看起来我已经授予 'username'@'%' 很多权限,但我仍然无法远程连接。
    猜你喜欢
    • 2017-04-13
    • 1970-01-01
    • 1970-01-01
    • 2016-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-08
    相关资源
    最近更新 更多