我在 web 应用程序正确连接到 MySQL 服务器时遇到了问题,为了解决这个问题,我尝试注释掉bind-address
文件中的设置my.ini
。
这似乎解决了问题,但是我想知道这是否与安全有关。对于当然受用户/密码限制访问的生产环境,这是正确的设置吗?注释掉它和将其设置为有什么区别bind-address=0.0.0.0
?
答案1
注释掉该设置的影响取决于bind-address
之前设置的值。
注释掉设置与将其设置为默认值相同。手册会向您显示默认值: https://dev.mysql.com/doc/refman/8.0/en/server-options.html#option_mysqld_bind-address
bind-address
默认值:*
该手册还解释了该设置的含义以及它与使用 0.0.0.0 的区别:
如果地址是
*
,服务器在所有服务器主机 IPv4 接口上接受 TCP/IP 连接,并且,如果服务器主机支持 IPv6,则在所有 IPv6 接口上接受 TCP/IP 连接。使用此地址允许所有服务器接口上的 IPv4 和 IPv6 连接。此值为默认值。如果该选项指定了多个值的列表,则不允许使用此值。如果地址是
0.0.0.0
,服务器接受 TCP/IP 连接所有服务器主机 IPv4 接口。如果选项指定了多个值的列表,则不允许该值。
如果您的服务器没有使用限制访问 TCP 端口 3306(MySQL 的默认端口)的防火墙,则使用 * 或 0.0.0.0 将接受服务器配置的所有 IPv4 地址上的传入连接,以及环回地址 127.0.0.1/8 上的 TCP 连接,并且 * 还将允许所有传入的 IPv6 流量。
一般而言,仅为服务配置最低限度的网络访问权限被认为是良好的安全做法。 * 和 0.0.0.0 在许多情况下可能都过于宽松,但例如在应允许使用单个接口/IP 地址(即 192.0.2.1)进行远程 MySQL 访问的系统上,或或
之间没有有效的安全性差异。在 不需要允许远程 MySQL 访问的服务器(典型的 LAMP 服务器)上,建议使用。bind-address = 192.0.2.1
bind-address = 0.0.0.0
bind-address = *
bind-address = ::ffff:127.0.0.1
答案2
谈到安全性,将您的数据暴露给世人永远不是一个好选择。
谈论如何避免你所做的事情,如果你的 MySQL 在 Linux 上运行并且你有 SSH 访问权限,你可以配置一个隧道,而不需要向全世界公开 MySQL。
下面是一个例子:
ssh -v -N -o ExitOnForwardFailure=yes -o ConnectTimeout=10 -o NumberOfPasswordPrompts=3 \
-i ~/.ssh/yourkey.pem -o TCPKeepAlive=no -o ServerAliveInterval=60 \
-o ServerAliveCountMax=1 \
[email protected] -L 3306:127.0.0.1:3306
这样,您将您的 GUI 或任何您需要连接的 APP 连接到 IP 127.0.0.1 端口 3306 就完成了。
如果你不想使用命令行,你可以设置大多数 GUI 以通过 SSH 隧道连接你的 MySQL
最后,如果你注释掉,bind-address=0.0.0.0
让你的mysql监听所有IP地址的连接,而不仅仅是localhost
(127.0.0.1)