$cfg['servers'][$i]['hide_db']是唯一能隐藏数据库列表的配置项,需在config.inc.php服务器配置块内设置正则表达式(如'^(mysql|information_schema|performance_schema)$'),锚定全匹配且区分大小写,修改后须重启web服务并清缓存。
config.inc.php 里没有直接隐藏数据库的配置项
phpmyadmin 本身不提供 $cfg['servers'][$i]['hide_db'] 这类开箱即用的「隐藏数据库」开关。所谓「隐藏」,实际是靠权限控制 + 界面过滤实现的,硬改配置文件反而容易失效或引发权限混乱。
真正起作用的是 MySQL 用户权限和 $cfg['Servers'][$i]['hide_db'] 的正则匹配
$cfg['Servers'][$i]['hide_db'] 是唯一能影响数据库列表显示的配置,但它不是黑名单,而是「匹配后隐藏」——它接收一个正则表达式,匹配到的数据库名会被从左侧导航中移除(注意:不阻止访问,仅 UI 过滤)。
- 必须在
config.inc.php中对应服务器配置块内设置,例如:$cfg['Servers'][1]['hide_db'] = '^(mysql|information_schema|performance_schema)$';
- 正则需用
^和$锚定全名,否则可能误杀(比如写test会把test_old也隐藏) - 该配置只对当前用户生效,且前提是登录用户有权限看到这些库——如果 MySQL 层已拒访,这里设了也没效果
- 修改后必须重启 Web 服务(如 Apache/Nginx)或至少清空浏览器缓存,phpMyAdmin 不自动重载此配置
更可靠的做法:先收窄 MySQL 账户权限,再用 hide_db 做二次过滤
依赖 hide_db 单独隐藏,本质是掩耳盗铃。真实场景下,应优先通过 MySQL 授权限制可见范围:
- 创建专用账户时,只赋予特定数据库的权限:
GRANT ALL ON `myapp_%`.* TO 'pma-user'@'%';
—— 这样登录后根本看不到其他库 - 若必须用高权限账号(如 root),才考虑用
hide_db配合正则屏蔽系统库或敏感库名 - 注意:MySQL 8.0+ 的
SHOW DATABASES权限控制更细,关闭该权限后,用户连SHOW DATABASES都执行不了,此时hide_db完全无效(因为 phpMyAdmin 拿不到库列表)
常见踩坑:隐藏后仍能看到、或整个数据库列表空白
这两种现象基本都指向同一问题:正则写错或上下文不匹配。
- 写成
'test'而非'^test$'→ 匹配所有含 test 的库名 - 忘记加单引号或反斜杠转义特殊字符(如库名含点号:
'^my\.db$') - 配置写在
$cfg['Servers'][0]下,但实际连接的是[1]→ 完全不生效 - PHP 报错
Warning: preg_match(): Unknown modifier→ 正则分隔符冲突,建议统一用/包裹,避免用$作分隔符
最稳妥的验证方式:登录后打开开发者工具,看 Network 标签下 ajax.php?server=1&ajax_request=1&...&ajax_page=Server_Databases 返回的 JSON 数据里是否还包含目标库名——这才是真实过滤结果。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











