【问题标题】:Accessing MYSQL from a remote computer从远程计算机访问 MYSQL
【发布时间】:2014-05-21 09:03:28
【问题描述】:

下午好,

我正在尝试让公众访问客户端服务器(Windows Server 2012)中的 mysql 数据库设置,以便我的应用程序可以在白天向它发送一些信息。该应用程序将位于我的国家/地区,因此本地连接是不可能的。我已经关注了许多用户发布的这个问题的许多解决方案,但没有一个有效,但如果你觉得这个问题已经被问到并得到了回答,我深表歉意。

对于初学者来说,数据库在 3306 默认端口上工作,在线端口扫描器检测到该端口为打开状态(我联系了我的 ISP,以便他们可以打开该端口)。

我编辑了 mysql 配置文件“my.ini”来注释绑定地址值,以便它侦听它连接到的任何 ip(localhost.lan 和公共 ip)。 我可以使用 127.0.0.1、10.0.0.129(本地局域网)上的 mysql.exe 连接到数据库,但是当我尝试使用公共 IP 地址或我的主机名(解析为我的公共 IP 的 dyndns.org 域名时)地址)我收到以下错误:

ERROR 2003 (HY000): 无法连接到“xxx.xxx.xxx.xxx”上的 MySQL 服务器 (10061)

我的问题是: 即使我的端口检查为打开状态,这可能是防火墙问题吗?即使端口打开,它仍然可能是端口转发问题,对吗?我应该要求我的 ISP 将 3306 端口上的所有请求端口转发到特定机器吗?

【问题讨论】:

  • 你的服务器是什么? APACHEIIS?
  • 如果存在,请在 my.cnf 中注释掉 skip-networking
  • 另外,您需要确保您的数据库GRANTs 允许外部用户连接参见the GRANT docs for details
  • @MichaelBerkowski 安全吗?我不这么认为。好事是在客户端 PC 上使用静态 IP 并允许它在服务器上
  • @samitha 如果不使用 SSL,允许与数据库的外部连接总是不太安全,但这正是 OP 所要求的。

标签: mysql


【解决方案1】:

事实证明,其他线程上的所有建议都是正确的。为了让您的 MySQL 服务器可以从公共机器访问,您需要删除 MySQL 配置文件 (my.ini) 中的 bind-address 行。服务器应该开始监听它的任何可用网络。 然后您需要创建一个具有适当权限的用户来远程访问您的数据库。使用这个方法https://stackoverflow.com/a/8454003/1338401

导致我出现问题的部分是防火墙/路由器配置。您需要打开服务器正在侦听的门并将其转发到您的服务器计算机。在我的情况下,我无法访问路由器,所以我不得不联系我的 ISP 并指示他们打开端口并转发它。

正如许多人指出的那样,MySQL 使用未加密的 tcp/ip 连接进行连接,出于安全原因,不应使用此解决方案。

【讨论】:

    【解决方案2】:

    访问数据库的最佳方式是使用 ssh 隧道。 大多数数据库客户端都允许您这样做(例如,如果您的操作系统是 Windows,则为 MySQL Workbench)。

    这个想法是通过远程服务器上的 ssh 连接,然后用 localhost ip 打开一个 mysql 连接。

    在 google 中搜索“数据库 ssh 隧道”或“mysql ssh 隧道”。

    【讨论】:

    • 这不需要完全重写我当前使用 Connector/J 连接到 MySQL 服务器的应用程序吗?
    • 您可以在 mysql 服务器上简单地开发一个安全的 CRUD 网络服务(根据您的需要,您只能开发读取部分)。
    • 我一直在考虑为我的下一次迭代使用 CRUD Web 服务。感谢大家的帮助。
    猜你喜欢
    • 2018-01-30
    • 2012-01-17
    • 2010-12-10
    • 1970-01-01
    • 1970-01-01
    • 2013-05-03
    • 1970-01-01
    • 1970-01-01
    • 2012-06-09
    相关资源
    最近更新 更多