You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL 5.7中root@%如何给用户授予information_schema.Tables全量查询权限

MySQL 5.7普通用户查询information_schema.TABLES条目不全问题解决方案

根本原因

  • information_schema是MySQL内置的虚拟系统库,存储所有数据库对象的元数据,官方默认禁止直接对该库的任何对象执行GRANT赋权操作,所以执行grant select on information_schema.Tables to test_user;会直接报1044错误。
  • information_schema.TABLES的返回结果是动态过滤的:普通用户只能看到自己至少拥有一项权限的表的元数据,新建用户默认只有极少权限,所以只能返回50条结果;root用户拥有全局所有权限,所以可以返回全部300条结果。

解决方法

根据实际业务需求选择对应方案即可:

方案1:允许用户查询所有业务表的实际数据

直接给用户授予全局SELECT权限,执行语句:

-- 注意替换test_user和对应的用户主机地址,比如'%'或者'localhost'
GRANT SELECT ON *.* TO 'test_user'@'%';
FLUSH PRIVILEGES;

授予后用户既可以查看所有表的元数据,也可以查询所有业务表的实际数据。

方案2:仅允许用户查看所有表的元数据,禁止查询业务表实际数据

先授予全局SELECT权限,再单独回收业务库的查询权限即可,示例语句:

-- 先授予全局SELECT权限,让用户可以看到所有表的元数据
GRANT SELECT ON *.* TO 'test_user'@'%';
-- 回收指定业务库的SELECT权限,禁止用户查询实际数据,可重复执行回收多个库的权限
REVOKE SELECT ON 业务库名.* FROM 'test_user'@'%';
FLUSH PRIVILEGES;

如果需要隐藏的库较少,也可以授予全局SELECT权限后,通过其他权限控制规则实现,或者直接给用户授予全局SHOW VIEW+SHOW DATABASES权限,也能实现查看大部分元数据的需求。

验证方法

使用test_user账号登录MySQL,执行以下语句验证是否返回全量结果:

SELECT COUNT(*) FROM information_schema.Tables;

内容的提问来源于stack exchange,提问作者G Cong

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 01:15:05