SHOW DATABASES权限不存在,其可见性取决于用户是否拥有至少一个数据库的显式权限(如SELECT);若无任何库级权限,则仅显示information_schema等系统库,且受skip-show-databases配置影响。
SHOW DATABASES 权限不单独存在,它依赖库级权限
直接勾选「show databases」权限没用——mysql 里根本没有独立的 show databases 权限项。这个操作能否成功,完全取决于用户是否拥有至少一个数据库的显式权限(哪怕只是 select)。如果用户对所有库都是空权限,show databases 就只会返回 information_schema 和自己用户名同名的库(如果存在),其他库全部过滤掉。
为什么用户执行 SHOW DATABASES 看不到目标库?
常见原因就两个,且经常叠加出现:
-
skip-show-databases在 MySQL 配置中被启用:该选项会强制隐藏所有库名,普通用户连information_schema都看不到,只有 root 可见;检查/etc/mysql/my.cnf或/etc/my.cnf,确认没有这一行 - 用户未被授予任何库级权限:比如只执行了
GRANT USAGE ON *.* TO 'user'@'localhost',这允许连接但不赋予任何库可见性;必须补上类似GRANT SELECT ON target_db.* TO 'user'@'localhost' -
information_schema不出现在结果里是正常现象:它默认对所有用户可读部分视图,但不会列在SHOW DATABASES输出中——这不是权限问题
在 phpMyAdmin 中正确配置的实操步骤
登录 phpMyAdmin 后,按顺序操作,漏一步都可能失败:
- 用 root 或带
GRANT OPTION的账号进入「Users」→ 编辑目标用户 → 「Edit privileges」 - 切到「Database-specific privileges」区域(不是 Global),点击「Add privileges on the following databases」→ 选中你要开放的那个库(如
myapp_db) - 勾选至少一项数据权限,例如
SELECT;结构权限如CREATE、DROP按需加,但非必需 - 点「Go」保存后,务必点击右上角「Reload privilege tables」,或手动执行
FLUSH PRIVILEGES—— phpMyAdmin 不自动同步缓存 - 测试:用该用户重新登录,执行
SHOW DATABASES,此时应能看到myapp_db(以及information_schema)
容易被忽略的关键细节
很多人卡在「明明给了权限却还是看不到库」,问题往往出在主机名匹配或权限粒度上:
-
'user'@'localhost'和'user'@'127.0.0.1'是两个完全不同的账号,权限不互通;确认你编辑的是实际连接所用的那个 host - phpMyAdmin 的「Global privileges」页里没有
SHOW DATABASES勾选项,别在那里浪费时间找 - 如果目标库名含下划线或特殊字符,下拉菜单可能没显示全,建议在「SQL」页手动执行
GRANT SELECT ON `my_app-db`.* TO 'user'@'localhost'再刷新 - MariaDB 用户注意:
skip-grant-tables开启时,整个权限界面不可用,必须先关掉并重启mysqld



















