如何撤销MySQL普通用户对performance_schema的访问权限并限制其查看系统表信息?

2026-04-30 11:071阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计722个文字,预计阅读时间需要3分钟。

如何撤销MySQL普通用户对performance_schema的访问权限并限制其查看系统表信息?

MySQL 5.7 默认给予 USAGE 权限(即已创建但未授权任何权限的用户)对 performance_schema 的 SELECT 权限,这是历史兼容性设计,并非 bug。因此,无需担心。直接执行 CREATE USER 'u'@'%'; 创建的用户也能执行 SELECT * FROM performance_schema.events_statements_current;。

如何彻底收回 performance_schema 的 SELECT 权限?

必须显式用 REVOKE 剥离,且需注意作用域和生效时机:

  • 对单个用户:执行 REVOKE SELECT ON performance_schema.* FROM 'username'@'host';
  • 必须在 mysql 系统库所在实例上执行(不能跨实例代理)
  • 执行后需运行 FLUSH PRIVILEGES;(仅当使用 GRANT/REVOKE 修改权限表时才强制需要;但为保险起见建议加上)
  • 该操作不影响 information_schema——它由 MySQL 服务层硬编码控制,无法通过权限系统禁用普通用户的 SELECT

禁止查看所有系统库的更稳妥做法

仅 revoke performance_schema 不够,因为用户仍可访问 information_schema 中的表名、列名甚至部分统计信息(如 TABLESCOLUMNS)。

阅读全文
标签:Mysql

本文共计722个文字,预计阅读时间需要3分钟。

如何撤销MySQL普通用户对performance_schema的访问权限并限制其查看系统表信息?

MySQL 5.7 默认给予 USAGE 权限(即已创建但未授权任何权限的用户)对 performance_schema 的 SELECT 权限,这是历史兼容性设计,并非 bug。因此,无需担心。直接执行 CREATE USER 'u'@'%'; 创建的用户也能执行 SELECT * FROM performance_schema.events_statements_current;。

如何彻底收回 performance_schema 的 SELECT 权限?

必须显式用 REVOKE 剥离,且需注意作用域和生效时机:

  • 对单个用户:执行 REVOKE SELECT ON performance_schema.* FROM 'username'@'host';
  • 必须在 mysql 系统库所在实例上执行(不能跨实例代理)
  • 执行后需运行 FLUSH PRIVILEGES;(仅当使用 GRANT/REVOKE 修改权限表时才强制需要;但为保险起见建议加上)
  • 该操作不影响 information_schema——它由 MySQL 服务层硬编码控制,无法通过权限系统禁用普通用户的 SELECT

禁止查看所有系统库的更稳妥做法

仅 revoke performance_schema 不够,因为用户仍可访问 information_schema 中的表名、列名甚至部分统计信息(如 TABLESCOLUMNS)。

阅读全文
标签:Mysql