应授予select、show view、lock tables全局权限,因phpmyadmin基础功能依赖on .授权,限制到具体库会导致数据库树不显示或403错误。

只读权限该绑定哪些MySQL系统权限?
日常巡检只需看状态、查数据、导出表结构,不需要任何写操作。MySQL 8.0+ 推荐用 SELECT + SHOW VIEW + LOCK TABLES(仅用于 SHOW TABLE STATUS 正常显示)这三项,严格避开 INSERT、UPDATE、DELETE、DROP、CREATE、ALTER 等。旧版 MySQL(5.7)还需额外加 EXECUTE,否则 phpMyAdmin 的「浏览」页会报 #1370 - execute command denied 错误。
如何用SQL语句创建最小化只读用户?
别在 phpMyAdmin 图形界面点来点去,容易漏权限或误勾「全局权限」。直接执行以下语句(替换 'inspector' 和 '192.168.1.%' 为实际用户名和允许连接的IP段):
CREATE USER 'inspector'@'192.168.1.%' IDENTIFIED BY 'StrongPass123!'; GRANT SELECT, SHOW VIEW, LOCK TABLES ON *.* TO 'inspector'@'192.168.1.%'; FLUSH PRIVILEGES;
注意:ON *.* 是必须的——phpMyAdmin 的「数据库列表」「表结构查看」等基础功能依赖全局级 SELECT,限制到具体库(如 ON `app_db`.*)会导致左侧数据库树不显示或点击即 403。
phpMyAdmin里哪些功能会意外触发写操作?
巡检人员点错就可能越权,这些按钮/链接背后是隐式写操作,必须禁用:
-
Export页面里的「Quick export」默认启用LOCK TABLES,虽不改数据但需LOCK TABLES权限;若已授权则无害,但若没给该权限,导出会失败并暴露错误细节 -
Structure页的「Create index」、「Drop index」按钮,即使灰显,只要权限存在就会渲染,建议配合 phpMyAdmin 配置屏蔽 -
SQL标签页完全保留,但用户输入UPDATE会直接报错——这不是安全机制,只是权限拦截,不能依赖它防误操作
真正稳妥的做法是在 phpMyAdmin 的 config.inc.php 中加限制:
$cfg['Servers'][$i]['DisableIS'] = true; // 关闭 INFORMATION_SCHEMA 检索(减少敏感元数据暴露)
同时确保 $cfg['ShowSQL'] = false;,隐藏 SQL 执行框上方的「刷新」「清空」等危险按钮。
为什么用角色(ROLE)反而不推荐?
MySQL 8.0 虽支持 CREATE ROLE,但 phpMyAdmin(截至 5.2.1)对角色权限识别不完整:用户登录后仍可能看不到数据库列表,或「权限」页显示为空。更关键的是,角色需显式 SET DEFAULT ROLE,而 phpMyAdmin 不自动执行,导致权限不生效。不如直接绑用户——简单、可验证、无中间态。
另外,USAGE 权限看似最轻,但它连 SELECT 都不包含,单独授予等于白给;而 SELECT 不带 SHOW VIEW 时,视图会显示「没有权限」,巡检就卡在第一步。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











