mysql - 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`@`%` |
+--------------------------------------------------------------+
解决方案
您尝试连接的帐户无权从您的客户端 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'。这是否是一个安全问题,取决于您的环境。
推荐阅读
- unity3d - 场景重新加载后不保存对象名称
- ios - iOS 上 A-Frame 视频无法播放的任何新解决方法?
- python - Django 静态文件 - CSS 文件不加载
- java - 用户
没有访问 Webspheres 应用程序服务器中的 1 个文档所需的角色 - php - 安装 Beyondcode/laravel-websockets 时出现作曲家错误
- c# - ElasticSearch 返回的嵌套属性未映射到 C# 类
- java - 我的 Eclipse luna 无法启动我该怎么办?
- excel - Excel 技巧 - 用于查找
- python - 计算嵌套字典中列表的平均值
- xamarin.forms - 标头在 iOS 上与 XF 5.0.0.2196 有边框