如何允许远程连接到 MySQL


如果您使用 MySQL数据库 ,那么您就已经意识到在保持数据库安全方面面临的挑战。从使用 SQL 注入的数据库黑客尝试到暴力攻击,很难保证数据安全,尤其是在远程使用数据库的情况下。

有多种方法可以配置 SQL 服务器以允许远程连接,但您需要小心,因为允许在 MySQL 服务器上进行远程连接会使您的数据库成为黑客的容易攻击目标。如果您想允许到 MySQL 数据库的安全远程连接,您需要了解以下内容。

目录

    在你面前开始

    在对 MySQL 数据库进行任何更改之前,备份数据库很重要,尤其是在生产服务器(服务器在积极使用)。如果出现问题,您对数据库或托管它的服务器所做的任何更改都可能导致严重的数据丢失。

    您还可能发现对服务器连接的更改可能会阻止您以后访问它。如果发生这种情况,您可能需要咨询服务器管理员以获得进一步的支持。一个好主意是在本地运行的 MySQL 服务器上试用任何更改,以检查您的更改是否有效,然后再远程尝试。

    如果您对远程服务器进行更改,也很可能“需要一种安全的方式来连接和进行更改。 SSH(安全外壳)通常是执行此操作的最佳方式,因为它允许您连接到远程服务器。您还可以使用 SSH 连接到本地网络上的服务器,例如那些 托管在树莓派上

    本指南将引导您完成以下步骤配置 MySQL 以允许远程连接,但您首先需要确保您可以直接或远程访问托管 MySQL 服务器的服务器。

    假设您没有通过 SSH 远程访问您的服务器(例如)。在这种情况下,除非您的 MySQL 根帐户已经允许远程连接,否则您将无法将 MySQL 数据库配置为直接允许远程连接。因此,您需要先建立此连接,然后才能继续。

    编辑您的 MySQL 配置文件

    配置 MySQL 以允许远程连接的第一步连接是编辑你的 MySQL 配置文件。到此阶段,本指南将假设您已经连接到远程托管 mySQL 数据库的服务器、PC 或 Mac,并具有控制台访问权限。

    或者,您可以使用 Mac 或 Linux 上的开放终端或 Windows 上的文本编辑器配置本地 MySQL 服务器。

    1. 首先,使用您首选的控制台文本编辑器编辑您的 MySQL 数据库文件。在 Linux 上,在终端或 SSH 窗口中输入 sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf以使用 nano编辑器编辑此文件(假设您的 MySQL 数据库位于默认位置)
      1. 如果您运行的是 Windows,请打开文件资源管理器并访问包含您的 MySQL 安装的文件夹(例如 C:/Program Files/MySQL/MySQL Server 8.0)。双击条目,使用默认文本编辑器(例如记事本)打开 my.ini文件。如果不存在,首先创建文件
        1. 在 Mac 上,打开一个终端窗口并输入 sudo nano /usr/local/etc/my.cnf。如果您安装了 MySQL 使用自制软件 ,这是 MySQL 的默认配置文件。
        2. 上面引用的位置是默认位置用于 MySQL 配置文件。如果这些命令不起作用,您需要搜索相关文件(my.cnfmysqld.cnfmy.inistrong>) 手动定位相关文件路径。

          设置安全绑定地址 IP 范围

          1. 一旦你已打开服务器的 MySQL 配置文件,请使用键盘的箭头键到达文件的 bind-address部分。此 IP 范围限制与您的数据库的连接,通常设置为仅允许来自使用 127.0.0.1的本地计算机或服务器的连接。
            1. 如果要将 MySQL 数据库配置为允许来自使用当前互联网连接的设备的连接,请先 找到您的公共 IP 地址 ,然后替换 127.0.0.1使用该 IP 地址。或者,将其替换为您希望允许连接的设备或服务器的 IP 地址。
              1. 在某些情况下,您可能希望允许所有远程连接到 MySQL 数据库。这会带来极端风险,不应在生产服务器上使用。但是,如果您想允许这样做,请将 127.0.0.1替换为 0.0.0.0
                1. 记下基本设置部分中的端口值。这将在下一节中需要。如果不可见,将使用默认值,即端口 3306。您可以通过在新行中输入 port = xxxx来添加自己的端口,将 xxxx替换为合适的端口值。
                  1. 在 MySQL 配置文件中配置绑定地址后,保存该文件。如果您使用的是 Linux,请选择 Ctrl + OCtrl + X来执行此操作。在 Mac 上,选择 Command + OCommand + X。 Windows 用户可以通过选择文件保存来保存。
                    1. 接下来,Linux 和 Mac 用户可以通过键入 mysql.server stop && mysql.server startmysql.server restart重新启动 MySQL。您可能需要提升命令 使用须藤 (例如 sudo mysql.server restart)并使用适当的 mysql.server 文件路径(例如 /usr /local/bin/mysql.server).
                    1. 如果上述命令不起作用,请尝试 sudo service mysql restart
                      1. 要在 Windows 上重新启动 MySQL,请通过右键单击开始菜单并选择 Windows PowerShell (Admin).在 PowerShell 窗口中,输入 net stop mysql80,然后输入 net start mysql80,将 mysql80替换为您 PC 上的正确服务名称。
                      2. 如果您不确定 Windows 上的正确服务名称,请键入 net start以查找它。如果您无法重新加载配置,请重新启动服务器并手动重新加载 MySQL(如有必要)。

                        配置防火墙

                        在此阶段,您的 MySQL 数据库应允许使用您在 MySQL 配置文件中设置为 bind-address值的 IP 地址的设备进行远程连接(如果将此值设置为 0.0.0.0,则可以从所有设备进行远程连接)代替)。但是,您的设备或网络防火墙仍会阻止连接。

                        除非授予对特定端口的访问权限,否则大多数服务器和 PC 都使用防火墙来阻止连接。配置它的步骤会有所不同,具体取决于您是在 Windows 还是 Linux 上运行 MySQL。 Mac 防火墙默认处于禁用状态,因此您无需在此处完成任何其他步骤。

                        配置 Linux 防火墙

                        许多 Linux 服务器使用 iptables作为默认防火墙实用程序。您可以按照以下步骤进行配置。

                        1. 打开终端或 SSH 连接并输入 sudo iptables -A INPUT -p tcp -s XXXX –dport YYYY -j ACCEPT。将 XXXX替换为您希望允许 MySQL 连接 来自的设备的 IP 地址,并将 YYYY替换为 MySQL 配置中的匹配端口值文件(例如 3306)。
                          1. 这将临时配置防火墙。如果您使用的是基于 Debian 或 Ubuntu 的 Linux 服务器,请通过在终端或 SSH 中键入 sudo netfilter-persistent savesudo netfilter-persistent reload来永久更改此更改
                          2. 如果 iptables 不是您的 Linux 发行版的默认防火墙工具,则您需要查阅发行版的用户手册以获取更多信息。如果某些软件包(例如 netfilter-persistent)不可用,请使用您的发行版的软件存储库工具进行安装(例如 sudo apt install netfilter-persistent)。

                            配置 Windows 防火墙

                            如果您使用 Windows PC 或服务器来托管您的数据库,您可以使用以下步骤配置您的防火墙:

                            1. 右键单击“开始”菜单并选择运行
                              1. 运行框中,输入wf.msc并选择确定strong>。
                                1. Windows Defender窗口中,选择入站规则 >新规则
                                  1. 新入站规则向导中窗口,选择 端口>下一步
                                    1. 在下一个菜单中,从选项中选择 TCP,键入 3306(或 MySQL 配置文件中列出的任何端口值),然后选择 下一步
                                      1. 操作菜单中,将默认选项保留为允许连接启用,然后选择下一步
                                        1. 确认您希望规则应用于所有网络类型,然后选择下一步
                                          1. 在提供的端口中键入规则的描述性名称(例如 MySQL) ,然后选择完成将其添加到您的防火墙规则列表中。
                                          2. 如果您在连接时遇到问题,请重复上述步骤,确保使用相同的详细信息(端口 3306 等)在防火墙设置中创建新的出站规则。您可能还需要将本地网络路由器配置为 打开必要的阻塞端口 以允许到您的数据库的入站和出站连接。

                                            使用 MySQL 连接到远程服务器

                                            在将 MySQL 数据库配置为允许远程连接后,您需要实际建立到它的连接。您可以使用终端或 PowerShell 窗口中的 mysql命令(Windows 上的 mysql.exe)执行此操作。

                                            如果您运行的是 Windows,在开始之前,您需要确保 MySQL安装在本地 。 Mac 用户可以从终端安装 MySQL 使用自制软件 (brew install mysql),而 Linux 用户可以使用他们的本地应用程序存储库(例如 sudo apt install mysqlstrong>) 以安装必要的软件包。

                                            在 Linux 或 Mac 上连接到 MySQL

                                            1. 在 Mac 上连接到远程 MySQL 服务器或Linux,打开一个新的终端窗口并输入 mysql -u username -h XXXX:XXXX -p。将 XXXX:XXXX替换为您的远程服务器 IP 地址和端口号(例如 100.200.100.200:3306),并将用户名替换为您的 MySQL 用户名。
                                              1. 出现提示时,确认您的密码。如果连接成功,终端会显示成功信息。
                                              2. 在Windows上连接MySQL

                                                1. 连接到 Windows 上的远程 MySQL 服务器,通过右键单击“开始”菜单并选择 Windows PowerShell(管理员),打开一个新的 PowerShell 窗口。
                                                  1. 在新的PowerShell窗口中,输入cd“C:\Program Files\MySQL\MySQL Workbench 8.0\”进入正确的文件夹,替换这个目录在您的 PC 上使用正确的安装目录。例如,如果您的 MySQL 版本是 8.0.1,请改用 MySQL Workbench 8.0.1文件夹。
                                                    1. 从那里输入 .\mysql.exe -u username -h X.X.X.X:XXXX -p。将 XXXX:XXXX替换为您的远程服务器 IP 地址和端口号(例如 100.200.100.200:3306),并将用户名替换为 MySQL 用户名允许远程访问(例如 root)。按照屏幕上的任何其他说明进行操作。
                                                    2. 在提示时提供密码以完成登录过程并远程访问您的 MySQL 数据库。
                                                    3. 如果这不起作用,请使用这些步骤并使用 -h localhost参数使用 SSH(或直接访问它)连接到托管 MySQL 服务器的服务器或 PC。然后,您可以按照以下步骤创建合适的用户帐户。

                                                      允许远程用户访问 MySQL 数据库

                                                      此时,您应该能够使用您服务器的 root 用户帐户或具有提升权限的另一个用户帐户远程连接到您的 MySQL 服务器。由于这种访问级别是不安全的,您可能更愿意创建一个更受限制的帐户来访问您的 MySQL 数据库。

                                                      此帐户将对您的 MySQL 服务器的访问权限有限,仅允许它与选定的数据库进行交互。它将无法进行更严重的更改,例如访问其他数据库数据、创建新用户帐户等。

                                                      您需要能够远程登录 MySQL 服务器。如果您无法远程使用您的 root 帐户,则需要使用 mysql命令通过远程 SSH 连接或直接访问托管服务器的 PC 或服务器来访问服务器的外壳。p>

                                                      1. 在您的远程 MySQL shell(使用 mysql工具)中,输入 CREATE USER “username”@”xxxx” IDENTIFIED BY “password”;并选择回车。将用户名替换为您要创建的用户名,xxxx替换为您要连接的 IP 地址,密码替换为合适的密码。
                                                        1. 您需要为新帐户授予必要的权限。为此,请键入 GRANT ALL ON databasename.* TO username@”x.x.x.x”;并将数据库名称、用户名、x.x.x.x替换为正确的详细信息。如果您愿意,请将 databasename替换为 *以授予其访问所有数据库的权限。
                                                        2. 授予访问权限后,使用上一节中的步骤使用您的新帐户(例如 mysql -u 用户名)远程连接到您的服务器-h XXXX:XXXX -p).

                                                          保护您的数据库数据

                                                          无论您使用的是 MySQL 还是其他类型的 SQL数据库,保持连接安全以维护数据安全非常重要。这样做的一个好方法是 生成用于远程访问的 SSH 密钥 到您的服务器,而不是依赖过时(且容易猜到)的密码。

                                                          如果您担心数据丢失,您可以轻松备份你的数据库 在线。大多数数据库都使用 Linux 服务器运行——您可以轻松自动化 Linux 文件备份 。如果你在 Windows 上运行 MySQL,你可以设置一个类似的 Windows 自动备份系统 ,让你在紧急情况下恢复你的数据。

                                                          相关文章:


                                                          9.08.2021