MySQL只读账号怎么配-GRANT SELECT和授权范围

作者:袖梨 2026-08-29

给 MySQL 用户做只读限制时,不能只补一条 GRANT SELECT 就收工;先查 SHOW GRANTS,把写权限和高危授权清掉,再用新连接验证才稳。

SHOW GRANTS FOR 'user'@'host' 是最可靠的一键审计方式,它动态合并全局、库、表、列等所有显式权限为可执行GRANT语句,避免手动JOIN系统表的兼容性与逻辑问题;直接查 mysql.user 表只能看到全局权限,不完整很多人在 phpMyAdmin 的 SQL 标签页里执行 SELECT * FROM mysql.user,以为这就看清了所有权限——其;MySQL 的权限是分层存储的:mysql.user 只存全局权限(如 Select_priv、Super_priv),而数据库级权限在 mysql.db,表级在 mysql.tables_p。phpMyAdmin 界面默认不自动 JOIN 这些表,所以单看 mysql.user 会漏掉大量实际生效的权限;常见问题表现:某用户明明没勾选数据库权限,却能操作某个库——大概率是因为 mysql.db 里有残留记录,或该用户在 mysql.user 里开了 Super_priv = 'Y';这是 phpMyAdmin 内部“编辑权限”页面背后真正依赖的机制。实操更适合:在 phpMyAdmin 的 SQL 标签页中直接运行:SHOW GRANTS FOR 'app_user'@'localhost';如果报错 Access denied,说明当前登录账号没有 SELECT 权限在 mysql 库,或缺少 SYSTEM_USER 特权(MySQL 8.0.17+)输出;这不是实时权限快照,而是当前显式授予状态的静态快照,但它能帮你快速发现异常模式——比如多个开发账号都意外拥有 SUPER 权限,或测试账号被误授了 DROP。

相关文章

精彩推荐