phpMyAdmin 本身不提供IP白名单功能,其连接控制完全依赖MySQL/MariaDB服务端授权、防火墙规则及配置文件中的服务器参数;需同步配置防火墙、MySQL用户Host权限和phpMyAdmin的$cfg['Servers']数组。

phpMyAdmin 本身不控制数据库连接白名单,它只是个 Web 界面;真正起作用的是 MySQL/MariaDB 服务端的用户授权和防火墙规则。
为什么直接在 phpMyAdmin 里找不到“IP 白名单”设置
phpMyAdmin 没有独立的网络访问控制模块。它连接数据库时,用的是你配置的 $cfg['Servers'][$i]['host'] 和 $cfg['Servers'][$i]['user'] 等参数,但能否连上,完全取决于目标 MySQL 实例是否允许该客户端 IP 的 TCP 连接,以及对应 MySQL 用户是否被授权从该 IP 登录。
常见误解是:在 phpMyAdmin 的服务器列表里填了远程地址,就自动能连——其实只是“尝试连”,失败往往卡在底层网络或 MySQL 权限层。
必须同步配置的三个地方
要让 phpMyAdmin 成功连接某个远程数据库(比如 192.0.2.100),需确保以下三者全部放行:
立即学习“PHP免费学习笔记(深入)”;
- 目标服务器的防火墙(如
ufw或iptables)开放了3306端口,且允许你的 phpMyAdmin 所在服务器的公网 IP(比如203.0.113.45)入站 - MySQL 中创建或修改用户,指定其
Host为具体 IP(如'myuser'@'203.0.113.45'),或使用通配符(如'myuser'@'%',不推荐) - phpMyAdmin 配置中,
$cfg['Servers'][$i]['host']填的是远程数据库的可解析域名或公网 IP(如'192.0.2.100'),且$cfg['Servers'][$i]['port']正确(默认3306)
如何安全地批量添加多个远程 IP 到 MySQL 用户权限
MySQL 不支持单条语句给一个用户绑定多个 Host,必须为每个 IP 单独授权。例如,要让 admin 用户可从 203.0.113.45 和 198.51.100.12 连接:
CREATE USER 'admin'@'203.0.113.45' IDENTIFIED BY 'strong_pass'; GRANT ALL PRIVILEGES ON *.* TO 'admin'@'203.0.113.45'; CREATE USER 'admin'@'198.51.100.12' IDENTIFIED BY 'strong_pass'; GRANT ALL PRIVILEGES ON *.* TO 'admin'@'198.51.100.12'; FLUSH PRIVILEGES;
注意:'admin'@'%' 看似方便,但会绕过 IP 限制,且 MariaDB 10.4+ 默认禁用空 Host 匹配,实际可能失效;生产环境务必避免。
phpMyAdmin 配置多个远程服务器的典型写法
在 config.inc.php 中,用数组索引区分不同服务器,每个 $cfg['Servers'][$i] 对应一个远程实例:
$cfg['Servers'][1]['host'] = '192.0.2.100'; $cfg['Servers'][1]['port'] = '3306'; $cfg['Servers'][1]['user'] = 'admin'; $cfg['Servers'][1]['password'] = 'strong_pass'; <p>$cfg['Servers'][2]['host'] = '203.0.113.200'; $cfg['Servers'][2]['port'] = '3307'; // 非标端口要显式写 $cfg['Servers'][2]['user'] = 'monitor'; $cfg['Servers'][2]['password'] = 'read_only_pass';
关键点:$cfg['Servers'][1] 和 $cfg['Servers'][2] 是独立配置,互不影响;但每个对应的 MySQL 用户都必须提前在各自数据库上完成 IP 级授权——这点最容易漏掉。
最常被忽略的是:改完 MySQL 用户权限后忘记执行 FLUSH PRIVILEGES,或者防火墙规则没 reload,导致看起来配置全对,却始终报 #1045 Cannot log in to the MySQL server 或 Connection refused。先用 mysql -h 192.0.2.100 -u admin -p 在 phpMyAdmin 所在机器上手动测试连通性,比反复调 phpMyAdmin 配置更高效。



















