如果您使用 MySQL数据库 ,那么您就已经意识到在保持数据库安全方面面临的挑战。从使用 SQL 注入的数据库黑客尝试到暴力攻击,很难保证数据安全,尤其是在远程使用数据库的情况下。
有多种方法可以配置 SQL 服务器以允许远程连接,但您需要小心,因为允许在 MySQL 服务器上进行远程连接会使您的数据库成为黑客的容易攻击目标。如果您想允许到 MySQL 数据库的安全远程连接,您需要了解以下内容。

在你面前开始
在对 MySQL 数据库进行任何更改之前,备份数据库很重要,尤其是在生产服务器(服务器在积极使用)。如果出现问题,您对数据库或托管它的服务器所做的任何更改都可能导致严重的数据丢失。
您还可能发现对服务器连接的更改可能会阻止您以后访问它。如果发生这种情况,您可能需要咨询服务器管理员以获得进一步的支持。一个好主意是在本地运行的 MySQL 服务器上试用任何更改,以检查您的更改是否有效,然后再远程尝试。
如果您对远程服务器进行更改,也很可能“需要一种安全的方式来连接和进行更改。 SSH(安全外壳)通常是执行此操作的最佳方式,因为它允许您连接到远程服务器。您还可以使用 SSH 连接到本地网络上的服务器,例如那些 托管在树莓派上 。

本指南将引导您完成以下步骤配置 MySQL 以允许远程连接,但您首先需要确保您可以直接或远程访问托管 MySQL 服务器的服务器。
假设您没有通过 SSH 远程访问您的服务器(例如)。在这种情况下,除非您的 MySQL 根帐户已经允许远程连接,否则您将无法将 MySQL 数据库配置为直接允许远程连接。因此,您需要先建立此连接,然后才能继续。
编辑您的 MySQL 配置文件
配置 MySQL 以允许远程连接的第一步连接是编辑你的 MySQL 配置文件。到此阶段,本指南将假设您已经连接到远程托管 mySQL 数据库的服务器、PC 或 Mac,并具有控制台访问权限。
或者,您可以使用 Mac 或 Linux 上的开放终端或 Windows 上的文本编辑器配置本地 MySQL 服务器。



上面引用的位置是默认位置用于 MySQL 配置文件。如果这些命令不起作用,您需要搜索相关文件(my.cnf、mysqld.cnf或 my.inistrong>) 手动定位相关文件路径。
设置安全绑定地址 IP 范围





- 接下来,Linux 和 Mac 用户可以通过键入 mysql.server stop && mysql.server start或 mysql.server restart重新启动 MySQL。您可能需要提升命令 使用须藤 (例如 sudo mysql.server restart)并使用适当的 mysql.server 文件路径(例如 /usr /local/bin/mysql.server).



如果您不确定 Windows 上的正确服务名称,请键入 net start以查找它。如果您无法重新加载配置,请重新启动服务器并手动重新加载 MySQL(如有必要)。
配置防火墙
在此阶段,您的 MySQL 数据库应允许使用您在 MySQL 配置文件中设置为 bind-address值的 IP 地址的设备进行远程连接(如果将此值设置为 0.0.0.0,则可以从所有设备进行远程连接)代替)。但是,您的设备或网络防火墙仍会阻止连接。
除非授予对特定端口的访问权限,否则大多数服务器和 PC 都使用防火墙来阻止连接。配置它的步骤会有所不同,具体取决于您是在 Windows 还是 Linux 上运行 MySQL。 Mac 防火墙默认处于禁用状态,因此您无需在此处完成任何其他步骤。
配置 Linux 防火墙
许多 Linux 服务器使用 iptables作为默认防火墙实用程序。您可以按照以下步骤进行配置。


如果 iptables 不是您的 Linux 发行版的默认防火墙工具,则您需要查阅发行版的用户手册以获取更多信息。如果某些软件包(例如 netfilter-persistent)不可用,请使用您的发行版的软件存储库工具进行安装(例如 sudo apt install netfilter-persistent)。
配置 Windows 防火墙
如果您使用 Windows PC 或服务器来托管您的数据库,您可以使用以下步骤配置您的防火墙:








如果您在连接时遇到问题,请重复上述步骤,确保使用相同的详细信息(端口 3306 等)在防火墙设置中创建新的出站规则。您可能还需要将本地网络路由器配置为 打开必要的阻塞端口 以允许到您的数据库的入站和出站连接。
使用 MySQL 连接到远程服务器
在将 MySQL 数据库配置为允许远程连接后,您需要实际建立到它的连接。您可以使用终端或 PowerShell 窗口中的 mysql命令(Windows 上的 mysql.exe)执行此操作。
如果您运行的是 Windows,在开始之前,您需要确保 MySQL安装在本地 。 Mac 用户可以从终端安装 MySQL 使用自制软件 (brew install mysql),而 Linux 用户可以使用他们的本地应用程序存储库(例如 sudo apt install mysqlstrong>) 以安装必要的软件包。
在 Linux 或 Mac 上连接到 MySQL

在Windows上连接MySQL



如果这不起作用,请使用这些步骤并使用 -h localhost参数使用 SSH(或直接访问它)连接到托管 MySQL 服务器的服务器或 PC。然后,您可以按照以下步骤创建合适的用户帐户。
允许远程用户访问 MySQL 数据库
此时,您应该能够使用您服务器的 root 用户帐户或具有提升权限的另一个用户帐户远程连接到您的 MySQL 服务器。由于这种访问级别是不安全的,您可能更愿意创建一个更受限制的帐户来访问您的 MySQL 数据库。
此帐户将对您的 MySQL 服务器的访问权限有限,仅允许它与选定的数据库进行交互。它将无法进行更严重的更改,例如访问其他数据库数据、创建新用户帐户等。
您需要能够远程登录 MySQL 服务器。如果您无法远程使用您的 root 帐户,则需要使用 mysql命令通过远程 SSH 连接或直接访问托管服务器的 PC 或服务器来访问服务器的外壳。p>


授予访问权限后,使用上一节中的步骤使用您的新帐户(例如 mysql -u 用户名)远程连接到您的服务器-h XXXX:XXXX -p).
保护您的数据库数据
无论您使用的是 MySQL 还是其他类型的 SQL数据库,保持连接安全以维护数据安全非常重要。这样做的一个好方法是 生成用于远程访问的 SSH 密钥 到您的服务器,而不是依赖过时(且容易猜到)的密码。
如果您担心数据丢失,您可以轻松备份你的数据库 在线。大多数数据库都使用 Linux 服务器运行——您可以轻松自动化 Linux 文件备份 。如果你在 Windows 上运行 MySQL,你可以设置一个类似的 Windows 自动备份系统 ,让你在紧急情况下恢复你的数据。