如果您将其设置bind-address
为127.0.0.1
,my.cnf
是否有任何方法可以手动允许来自特定 IP 地址的连接?
我的数据库主要通过托管它的服务器访问,但我还希望能够通过 odbc 连接器直接从办公室访问数据库。是否可以指定例外?或者bind-address
设置后 ssh 隧道是否是连接数据库的唯一可行方法?
(我试图避免在办公室的每台机器上设置 ssh 隧道)。
答案1
bind-address
指定当地的你的mysql服务器的ip地址,它不需要做任何事情偏僻的地址(可以从哪里进行连接)。
您的地址(以 开头192.168
)是本地网络地址,这意味着它只能从您的本地网络连接。这是 localnet mysql 的一种非常简单的方法和网关服务器使 mysql 仅在您的本地网络方向上可用。
但它不能提供任何基于偏僻的连接上的地址。
这个绑定其实是linux(unix)内核的一个设置:创建一个套接字,此时,mysql守护进程的监听TCP端口3306,可以设置它在哪个接口上等待连接。默认情况下,它在所有这些接口上都是可连接的。
这是因为你不能从你的mysql配置中执行,这就是你想要的。但你有两个更好的选择:
- 您可以允许所有人连接 mysql(使用
bind-address = 0.0.0.0
或完全注释掉此行)。之后,您可以使用iptables
来限制可能的连接器地址(在本例中,限制为您的本地网络和您朋友的外部 IP)。 - 您可以使用 mysql 自己的安全机制来限制可能的 mysql 连接器。这是基于主机的 mysql 服务器身份验证。在 Google 中搜索“mysql grant host”。
(1)更安全,但(2)不需要您学习 iptables。
答案2
您必须通过ssh
隧道设置端口转发。
mysql
在收听时127.0.0.1:3306
,您必须创建转发链接:
ssh -f [email protected] -L localhost:3306:127.0.0.1:3306 -N
然后,您就可以连接到mysql
上的 ,localhost:3306
就像在本地计算机上启动一样。所有到 的连接localhost:3306
都将通过加密链接转发到127.0.0.1:3306
上的your-server.tld
。在这里,我使用了同义词localhost
和127.0.0.1
来告诉客户端和服务器。
只有拥有有效帐户的用户your-server.tld
才能连接到mysql
服务器,无论其 IP 地址如何。您可以轻松创建多个通往不同服务器的隧道。
ssh -f [email protected] -L localhost:3306:127.0.0.1:3306 -N
ssh -f [email protected] -L localhost:3307:127.0.0.1:3306 -N
ssh -f [email protected] -L localhost:3308:127.0.0.1:3306 -N