如何允许通过互联网连接MySQL?



我有一个MySQL数据库,我通过Java JDBC访问它,它在我的本地网络中工作正常(使用localhost192.168.*.*本地地址(。但是我也想从互联网远程访问它,当我使用我的全球地址176.214.186.243连接到它时(它是 dynamyc 地址,但它在我的尝试中保持静止 2 天(,我得到下一个错误com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.在MySQL工作台中,我在图片上显示了特权(所有内容。 但是我仍然无法使用全局IP连接到数据库。

我做错了什么?

mysql 限制对用户、表和远程地址的任意组合的访问。在您的情况下,用户很可能可以在本地访问所有内容,但不能从 extern 访问(例如,对于 root 来说,这将是一件好事(。这可以通过以下方式更改:

GRANT ALL ON <database>.* TO 'client'@'%.%.%.%' IDENTIFIED BY '<a password for external usage>';
FLUSH PRIVILEGES;
  • <database>.*授予对<database>中的 alle 表的访问权限
  • 我已经添加了您的用户名,这似乎很client
  • %.%.%.%是指任何 IP 地址,其中 1.-4. 数字可以是任何内容
    • 也许您可以限制 IP 的范围或使用 FQDN
  • <a password for external usage>只是为了这种连接,可以是别的东西。

更多信息在这里

您应该授予指定用户从特定IP地址访问的权限,例如:

授予 [权限|所有权限]在 schema.table 上到 'username'@'hostname' 通过"密码">
与授予选项标识; 刷新权限;

  • 权限可以是操作名称,如选择、删除和...或者,如果您想将所有权限授予设置"所有权限"的用户
  • schema.table 可以只指定单个表,也可以是类似.以支持所有架构和表。
  • 用户名也称为角色是默认的,但它可以是%授予所有用户给定的权限。
  • 主机名可以是 IP 或主机名,也可以像用户名一样是 %,以授予指定用户给定的权限。

如需更多信息,请参阅 https://dev.mysql.com/doc/refman/8.0/en/grant.html,https://stackoverflow.com/a/6239145/2137378

mysql文档更受欢迎。 检查您的MySQL版本并继续MySQL上的确切版本文档。

当然,上面的描述是让mysql引擎知道它的远程用户,如果这两者之间存在一些障碍,比如防火墙应该以某种方式解决。 例如,如果您在 Ubuntu 上,您可以通过使用以下方法禁用防火墙来检查防火墙是否是主要问题:

sudo ufw disable

禁用防火墙并授予权限后,远程访问是可以的,然后您就知道防火墙是问题所在。 要使用以下内容启用:

sudo ufw enable

最新更新