mysql - 无法远程访问 MySQL
问题描述
我正在使用 Windows Server 2016 尝试通过 IIS 托管 PHP 网站,该网站使用 MySQL 作为数据库,并单独拥有一个用 VB.NET(.NET 框架 4.7.2)编写的独立桌面应用程序,该应用程序也应该与 MySQL 数据库通信。
我能够设置网站,并且可以通过导航到https://mywebsite.com:8443/在外部网络上正确访问它。我可以使用我的网站来运行 PHP 脚本,它们反过来利用 localhost:3306 上的 MySQL 数据库。
当我尝试通过外部网络上的桌面应用程序访问数据库时,问题就出现了。如果我通过 VPN 连接到机器,请设置我的连接字符串,以便数据源指向端口 3306 的内部 IP 地址,然后我就可以正常连接了。但是,如果我从我的 VPN 断开连接,更改连接字符串以使数据源指向我的公共 IP 地址,则无法连接。它的价值是什么,这就是连接字符串的样子(唯一改变的是datasource
:
datasource=-public ip-;port=3306;username=dotnet;password=-password-;database=test;
我得到的具体错误是:
无法连接到任何指定的 MySQL 主机。
如果我将端口从 更改3306
为8443
(我认为这不正确,但我将它添加到我的 PHP 网站),我会收到一个不同的错误:
无法从传输连接中读取数据:连接尝试失败,因为连接方在一段时间后没有正确响应,或者连接失败,因为连接的主机没有响应。
我下了一个兔子洞,发现root
默认情况下不允许外部请求,这就是我创建dotnet
用户的原因。在 MySQL Workbench 中,这些是该用户的配置:
- 认证类型:标准
- 主机匹配限制:%
然后我读到 SQL 服务器默认bind-address
设置为127.0.0.1
,所以我将其更改为接受所有内容并通过运行进行验证:
mysqld --verbose --help
滚动直到我找到bind-address
它打印的值是*
.
最后,我读到我需要确保防火墙设置正确。我转到具有高级安全性的 Windows 防火墙,并看到端口 3306 的规则具有以下属性:
- 协议类型:TCP
- 协议数:6(禁用)
- 本地端口:特定端口 3306
- 远程端口:所有端口
在这一点上,我不明白为什么它在 VPN 连接到机器时连接正常,但当我尝试从外部网络连接时失败。
解决方案
推荐阅读
- django - Typeform Security API 和 Django:未正确验证哈希
- oracle - 需要在plsql代码oracle apex的字符串内连接“”
- angular - Ionic 4 firestoe如何在数据中保存id?
- algorithm - K个散列函数的值,使得误报概率最多为1/n
- node.js - 如何使用 React Node 和 MongoDB 上传和显示 svg 图片?
- tensorflow - 安装 TensorFlow 插件
- javascript - sort() JS 函数没有给出预期的结果
- jquery - 我有一个关于 DOM 选择器的问题,我应该在作业中使用它
- json - 从 JSON 文件读取时 Python 抛出错误
- amazon-ec2 - AWS:如何创建指向私有 IP 的 DNS?