mysql 中information_schema 库的权限说明
mysql 中information_schema 库的权限说明
目录
MySQL 中 information_schema 的查询权限不是通过 GRANT 显式分配的,而是“隐式授予(自动)”的,但能看到多少内容,完全取决于你在真实对象上的权限。
下面把 5.7 / 8.0 行为、可见范围、常见误区 一次说清楚。
一、是否需要 GRANT SELECT ON information_schema.* ?
❌ 不需要,也不允许
GRANT SELECT ON information_schema.* TO 'user'@'%';
-- ❌ MySQL 会报错
原因:
- information_schema 是 系统虚拟库
- 不能也不需要显式授权
- MySQL 自动允许所有登录用户查询
二、那为什么有的用户“查不到数据”?
🔑 核心规则(记住这句话)
information_schema 只展示“当前用户有权限看到的对象”
你能看到什么,取决于你是否拥有:
- 表权限(SELECT / INSERT / …)
- 视图权限(SHOW VIEW)
- 过程权限(EXECUTE / SHOW ROUTINE)
- 对象的 DEFINER / SQL SECURITY
三、常见场景说明
1️⃣ 表 / 视图(TABLES / COLUMNS)
SELECT * FROM information_schema.TABLES;
你只能看到:
- 你 有任意权限 的表
- 或你是 owner / DEFINER
📌 没有 SELECT 权限的表 → 不可见
四、MySQL 5.7 vs 8.0 对比
| 行为 | MySQL 5.7 | MySQL 8.0 |
|---|---|---|
| 是否需授权 information_schema | 否 | 否 |
| 是否可查询 | 默认可 | 默认可 |
| 可见对象受权限限制 | 是 | 是 |
| ROUTINES 可见性 | 较宽松 | 更严格 |
| VIEW / ROUTINE 定义保护 | 弱 | 强 |
六、常见误区(生产必看)
❌ 误区 1:
“information_schema 是不是忘了授权?”
➡️ 不是,永远是隐式授权
❌ 误区 2:
“给了 SELECT on .,为什么还看不到定义?”
➡️ 定义受 SHOW VIEW / SHOW ROUTINE / DEFINER 控制
❌ 误区 3:
“能不能通过 information_schema 绕过权限?”
➡️ 不能(8.0 已彻底封死)
七、一句话总结(可直接写规范)
- information_schema 对所有用户默认可查询,无需授权;
- 但其返回内容严格受对象权限和 DEFINER 控制,不能作为越权查看的手段。

浙公网安备 33010602011771号