MySQL 默认监听所有网络接口(0.0.0.0
),需要将其绑定到内网 IP 地址或限制访问范围。
找到 MySQL 的主配置文件,通常是 /etc/my.cnf
或 /etc/mysql/my.cnf
。使用文本编辑器打开:
sudo vi /etc/my.cnf
bind-address
在 [mysqld]
段落中添加或修改 bind-address
参数,指定为内网 IP 地址(例如 192.168.1.x
):
[mysqld]
bind-address=192.168.1.x
192.168.1.x
替换为你的服务器内网 IP 地址。bind-address=0.0.0.0
,然后通过用户权限限制访问范围。保存并退出文件。
修改完成后,重启 MySQL 服务以使更改生效:
sudo systemctl restart mysqld
通过 MySQL 用户权限管理,限制只有 192.168.1.*
网段的设备可以访问。
使用管理员账户(如 root
)登录 MySQL:
mysql -u root -p
假设你要允许内网 192.168.1.*
网段的设备访问,可以执行以下命令:
CREATE USER 'your_user'@'192.168.1.%' IDENTIFIED BY 'your_password';
GRANT ALL PRIVILEGES ON *.* TO 'your_user'@'192.168.1.%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
解释:
'your_user'@'192.168.1.%'
:表示允许 your_user
用户从 192.168.1.*
网段的任何 IP 访问。IDENTIFIED BY 'your_password'
:设置用户的密码。GRANT ALL PRIVILEGES
:授予用户对所有数据库和表的全部权限。WITH GRANT OPTION
:允许用户将权限授予其他用户。FLUSH PRIVILEGES
:刷新权限,使更改立即生效。如果你之前创建了允许任意 IP(%
)访问的用户,建议删除这些用户以提高安全性。例如:
DROP USER 'your_user'@'%';
确保防火墙仅允许 192.168.1.*
网段访问 MySQL 的默认端口(3306)。
firewalld
限制访问运行以下命令限制 192.168.1.*
网段访问 MySQL 端口:
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port port="3306" protocol="tcp" accept'
sudo firewall-cmd --permanent --remove-port=3306/tcp
sudo firewall-cmd --reload
检查防火墙规则是否正确应用:
sudo firewall-cmd --list-all
你应该看到类似以下内容:
public (active)
target: default
icmp-block-inversion: no
interfaces: eth0
sources:
services: ssh dhcpv6-client
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
rule family="ipv4" source address="192.168.1.0/24" port port="3306" protocol="tcp" accept
完成上述配置后,进行以下测试:
尝试从 192.168.1.*
网段内的设备连接 MySQL:
mysql -u your_user -p -h 192.168.1.x
输入密码后,应该能够成功连接。
尝试从外网或其他非 192.168.1.*
网段的设备连接 MySQL,应该会失败。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。