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 控制,不能作为越权查看的手段。
posted @ 2026-05-21 09:37  数据库小白(专注)  阅读(27)  评论(0)    收藏  举报