phpMyAdmin 不控制数据库网段访问,真正生效的是 MySQL 用户的 host 字段;需用 CREATE USER 'u'@'192.168.10.%' 或精确 IP 创建账号,禁用 DNS 解析(skip_name_resolve=ON),并配置 bind-address 与防火墙。
phpMyAdmin 本身不控制数据库用户访问网段
phpmyadmin 是一个 web 界面工具,它不负责 mysql/mariadb 的网络访问控制。真正起作用的是 mysql 的用户账号权限系统——具体来说,是创建用户时指定的 host 部分。你不能在 phpmyadmin 的「用户账户」页面里填个“只允许 192.168.10.0/24”就生效,那里的「主机」字段只接受 mysql 支持的 host 匹配语法(如 ip、通配符、域名),不支持 cidr 表示法。
必须用 MySQL 的 GRANT 语句绑定具体 IP 或子网范围
MySQL 不原生支持 CIDR(比如 192.168.10.0/24),但可以用通配符或多个 GRANT 覆盖常见子网。实际操作中,有三种常用方式:
- 精确 IP:
CREATE USER 'myuser'@'192.168.10.5' IDENTIFIED BY 'pass'; - 单段通配符(匹配整个 C 段):
CREATE USER 'myuser'@'192.168.10.%' IDENTIFIED BY 'pass';—— 注意:这等价于192.168.10.0–192.168.10.255,但不包括192.168.10.255本身(因 MySQL 将其视为广播地址,通常不匹配) - 多个明确 IP 或网段:分别执行多条
GRANT,例如同时授权'myuser'@'192.168.10.10'和'myuser'@'192.168.10.11'
之后必须显式执行 FLUSH PRIVILEGES; 才能让变更生效。phpMyAdmin 的图形化「添加用户」功能底层也是调用这些语句,但它隐藏了 host 字段的语义细节,容易误填成 192.168.10.% 却忘了测试是否真能连上。
注意 MySQL 绑定地址和防火墙的双重限制
即使用户 host 设置正确,如果 MySQL 服务本身只监听 127.0.0.1(即 bind-address = 127.0.0.1 在 my.cnf 中),外部网段根本连不到端口,更别说鉴权了。你需要确认:
-
bind-address设为0.0.0.0(监听所有接口)或具体内网 IP(如192.168.10.100) - 系统防火墙(如
ufw或firewalld)放行了3306端口,且规则限制源 IP(例如ufw allow from 192.168.10.0/24 to any port 3306) - 云服务器安全组(如 AWS/Aliyun)也同步配置了对应入方向规则
少任何一个环节,都会表现为“连接被拒绝”或“Access denied”,但错误信息可能误导你去改用户权限,而实际是网络层被拦住了。
立即学习“PHP免费学习笔记(深入)”;
phpMyAdmin 登录用户 ≠ 数据库操作用户
这是最容易混淆的一点:你在 phpMyAdmin 登录时用的账号,只是用来进入 phpMyAdmin 这个 Web 应用的;真正执行 SQL 查询时,phpMyAdmin 默认使用你「在界面里手动选择」或「在配置文件中预设」的数据库用户身份。如果你没在 phpMyAdmin 的登录页切换到那个受限用户(比如 myuser@'192.168.10.%'),而是用 root 登录,那所有查询都以 root 权限运行,完全绕过你设的网段限制。
要验证是否生效,最可靠的方式是:从另一台不在允许网段内的机器,用命令行 mysql -u myuser -h your-db-ip -p 尝试连接——如果被拒绝,说明限制起效了;如果连上了,回头检查 SELECT User, Host FROM mysql.user; 输出,确认该用户的 Host 值确实是你期望的格式,且没有更高优先级的同名用户(MySQL 用户匹配按 User+Host 字符串排序,越具体的 host 优先级越高)。



















