如何允许远程连接到 MySQL

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

有多种方法可以配置SQL服务器以允许远程连接,但您需要小心,因为在MySQL服务器上允许远程连接会使您的数据库成为黑客的轻松目标。如果你想允许安全的远程连接到MySQL数据库,这里是你需要知道的。

在你开始之前(Before You Begin)

在对MySQL(MySQL)数据库进行任何更改之前,备份数据库(backup your database)非常重要,尤其是当您在生产服务器(正在使用的服务器)上工作时。如果出现问题,您对数据库或托管它的服务器所做的任何更改都可能导致严重的数据丢失。

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

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

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

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

编辑你的 MySQL 配置文件(Editing Your MySQL Configuration File)

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

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

  1. 首先,使用您首选的控制台文本编辑器来编辑您的MySQL数据库文件。在Linux 上(Linux),在终端或SSH窗口中键入sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf nano编辑器编辑此文件(假设您的MySQL数据库位于默认位置)。 

  1. 如果您运行的是Windows,请打开文件资源管理器(File Explorer)并访问包含MySQL安装的文件夹(例如C:/Program Files/MySQL/MySQL Server 8.0)。通过双击条目,使用默认文本编辑器(例如记事本(Notepad))打开my.ini文件。(my.ini)如果不存在,请先创建文件(create the file first)

  1. Mac上,打开终端窗口并输入sudo nano /usr/local/etc/my.cnf。如果您使用 homebrew安装了(using homebrew)MySQL,这是 MySQL 的默认配置文件(MySQL)

上面引用的位置是MySQL配置文件的默认位置。如果这些命令不起作用,您将需要手动搜索相关文件(my.cnfmysqld.cnfmy.ini)以找到相关文件路径。

设置安全绑定地址 IP 范围(Setting a Safe Bind-Address IP Range)

  1. 打开服务器的MySQL配置文件后,使用键盘的箭头键到达文件的绑定地址(bind-address)部分。此 IP 范围限制与数据库的连接,通常设置为仅允许使用127.0.0.1来自本地计算机或服务器的连接。

  1. 如果您想将MySQL数据库配置为允许使用当前 Internet 连接的设备进行连接,请先找到您的公共 IP 地址(find your public IP address),然后将127.0.0.1替换为该 IP 地址。或者,将其替换为您希望允许连接的设备或服务器的 IP 地址。

  1. 在某些情况下,您可能希望允许所有(all)远程连接到MySQL数据库。这会带来极大的风险(extreme risk),不应该在生产服务器上使用。但是,如果您想允许这样做,请将127.0.0.1替换为0.0.0.0

  1. 记下“基本设置”(Basic Settings)部分中的端口(port )值。这将在下一节中需要。如果不可见,将使用默认值,即端口3306。您可以通过在新行上键入port = xxxx来添加自己的端口,将xxxx替换为合适的端口值。

  1. MySQL配置文件中配置绑定地址(bind-address )后,保存文件。如果您使用的是Linux,请选择Ctrl + O Ctrl + X 来执行此操作。在 Mac 上,选择Command + O Command + X。Windows 用户可以通过选择File > Save来保存。

  1. 接下来,LinuxMac用户可以通过键入mysql.server stop && mysql.server startmysql.server restart来重启(mysql.server restart)MySQL。您可能需要使用 sudo(using sudo)提升命令(例如sudo mysql.server restart)并使用 mysql.server 文件的适当路径(例如/usr/local/bin/mysql.server)。

  1.  如果上述命令不起作用,请尝试sudo service mysql restart代替。

  1. 要在Windows上重新启动(Windows)MySQL ,请通过右键单击开始(Start)菜单并选择Windows PowerShell (Admin)打开一个新的PowerShell窗口。在 PowerShell 窗口中,键入net stop mysql80 ,然后键入net start mysql80,将mysql80替换为您 PC 上的正确服务名称。

如果您不确定Windows上的正确服务名称,请键入net start来查找它。如果您无法重新加载配置,请重新启动服务器并手动重新加载MySQL(如果需要)。

配置你的防火墙(Configuring Your Firewalls)

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

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

配置 Linux 防火墙(Configure Linux Firewalls)

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

  1. 打开终端或SSH连接并输入sudo iptables -A INPUT -p tcp -s XXXX –dport YYYY -j ACCEPT。将XXXX替换为您希望允许MySQL连接的设备的 IP 地址,并将(from)YYYY替换为MySQL配置文件中匹配的端口值(例如3306)。

  1. 这将临时配置防火墙。如果您使用的是基于 Debian 或 Ubuntu 的Linux服务器,请通过在终端或 SSH 窗口中键入sudo netfilter-persistent savesudo netfilter-persistent reload来使此更改永久生效。(sudo netfilter-persistent reload )

如果 iptables 不是Linux发行版的默认防火墙工具,则需要查阅发行版的用户手册以获取更多信息。如果某些软件包(例如netfilter-persistent)不可用,请使用您的发行版的软件存储库工具来安装它(例如sudo apt install netfilter-persistent)。

配置 Windows 防火墙(Configure Windows Firewalls)

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

  1. 右键单击(Right-click)开始(Start)菜单并选择运行(Run)

  1. 在“运行”(Run)框中,键入wf.msc并选择“确定(OK)” 。

  1. Windows Defender窗口中,选择入站规则(Inbound Rules )>新规则(New Rule)

  1. 新建入站规则向导(New Inbound Rule Wizard)窗口中,选择端口(Port )>下一步(Next)

  1. 在下一个菜单中,从选项中选择TCP,键入3306 (或(3306 )MySQL配置文件中列出的任何端口值),然后选择Next

  1. 操作(Action)菜单中,保留默认选项允许连接(Allow the connection)启用,然后选择下一步(Next)

  1. 确认您希望规则适用于所有网络类型,然后选择Next。 

  1. 在提供的端口中输入规则的描述性名称(例如MySQL ),然后选择(MySQL)Finish将其添加到防火墙规则列表中。

如果您在连接时遇到问题,请重复上述步骤,确保使用相同的详细信息(端口 3306 等)在防火墙设置中创建新的出站规则。(outbound rule )您可能还需要配置本地网络路由器以打开必要的阻塞端口(open the necessary blocked ports),以允许与数据库的入站和出站连接。 

使用 MySQL 连接到远程服务器(Connecting to a Remote Server Using MySQL)

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

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

在 Linux 或 Mac 上连接到 MySQL(Connecting to MySQL on Linux or Mac)

  1. 要连接到MacLinux上的远程(Linux)MySQL服务器,请打开一个新的终端窗口并输入mysql -u username -h XXXX:XXXX -p。将XXXX:XXXX替换为您的远程服务器 IP 地址和端口号(例如100.200.100.200:3306),将用户名(username)替换为您的 MySQL 用户名。

  1. 出现提示时,确认您的密码。如果连接成功,终端会显示成功消息。

在 Windows 上连接到 MySQL(Connecting to MySQL on Windows)

  1. 要连接到 Windows 上的远程MySQL(Windows)服务器(MySQL),请通过右键单击开始(Start)菜单并选择Windows PowerShell (Admin)打开一个新的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),将username替换为允许远程访问的MySQL用户名(例如root)。按照(Follow)屏幕上的任何其他说明进行操作。
  2. 在出现提示时提供您的密码,以完成登录过程并远程访问您的MySQL数据库。(MySQL)

如果这不起作用,请使用这些步骤并使用-h localhost参数,使用SSH (或直接访问它)连接到托管(SSH)MySQL服务器的服务器或 PC。然后,您可以按照以下步骤创建合适的用户帐户。

允许远程用户访问 MySQL 数据库(Allowing Remote User Access to a MySQL Database)

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

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

您需要能够远程登录您的MySQL服务器。(MySQL)如果您不能远程使用您的 root 帐户,您需要使用mysql命令通过远程SSH连接或直接访问托管服务器的 PC 或服务器来访问服务器的 shell。

  1. 在远程MySQL shell(使用mysql工具)中,输入CREATE USER “username”@”x.x.x.x” IDENTIFIED BY “password”; 并选择Enter。将username替换为您希望创建的用户名,将xxxx替换为您希望连接的 IP 地址,并将password替换为合适的密码。

  1. 您需要为新帐户授予必要的权限。为此,请键入GRANT ALL ON databasename.* TO username@”x.x.x.x”; 并将数据库名称、用户名(databasename, username, )xxxx 替换为正确的详细信息。如果您愿意,请将databasename替换为*以授予其访问所有数据库的权限。 

授予访问权限后,使用上一节中的步骤使用您的新帐户远程连接到您的服务器(例如mysql -u username -h XXXX:XXXX -p)。

保护您的数据库数据(Securing Your Database Data)

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

如果您担心数据丢失,您可以轻松地在线备份您的数据库(back up your database)。大多数数据库都使用Linux服务器运行 — 您可以轻松地自动执行 Linux 文件备份(automate a Linux file backup easily)。如果你在Windows上运行(Windows)MySQL,你可以为 Windows 设置一个类似的自动备份系统(automatic backup system for Windows),让你可以在紧急情况下恢复你的数据。



About the author

我是一名技术人员,多年来一直在音频和用户帐户领域工作。我有使用 Windows 和 Mac 电脑以及苹果产品的经验。自 2007 年以来,我还一直在教授 Apple 产品的使用。我的主要专业领域是用户帐户和家庭安全。除此之外,我还使用过各种软件程序,包括 Windows 7 Home Premium、8.1 Pro、10 Pro 和 12.9 Mojave。



Related posts