不能。MySQL 8.0+ 中 sys 库不可直接授权 SELECT,因其依赖 performance_schema 和 information_schema,需显式授予这两个库的 SELECT 权限及 PROCESS 权限,并启用 show_compatibility_56 才能正常查询 sys 视图。

MySQL 8.0+ 中 sys 库的 SELECT 权限到底能不能直接授?
不能。直接执行 GRANT SELECT ON sys.* TO 'auditor'@'%' 会报错 Access denied; you need (at least one of) the SYSTEM_USER privilege —— 因为 sys 是系统视图库,底层依赖 performance_schema 和 information_schema,MySQL 默认禁止普通账号直接查它,哪怕只是 SELECT。
真正起作用的是 PERFORMANCE_SCHEMA 和 INFORMATION_SCHEMA 的细粒度权限
第三方审计工具(比如 OneAudit、SolarWinds DPA、或自研采集器)读 sys 视图,实际是通过 performance_schema(如 events_statements_summary_by_digest)和 information_schema(如 PROCESSLIST、TABLES)拼出来的。所以必须显式授权这两个库的只读能力:
GRANT SELECT ON performance_schema.* TO 'auditor'@'%';GRANT SELECT ON information_schema.* TO 'auditor'@'%';- 如果审计需要看当前连接用户/主机,还需
GRANT PROCESS ON *.* TO 'auditor'@'%';(否则information_schema.PROCESSLIST返回空)
注意:PROCESS 权限不等价于 SUPER,它只允许查看线程列表,相对安全。
为什么有些环境加了权限还是查不到 sys 视图?
常见三个漏点:
- MySQL 8.0.16+ 默认关闭
show_compatibility_56=OFF,导致旧版sys视图(如sys.session)依赖的INFORMATION_SCHEMA.PROCESSLIST字段缺失 —— 必须确保已执行SET GLOBAL show_compatibility_56 = ON;(重启后失效,建议写进my.cnf) - 账号未刷新权限:授完权后必须
FLUSH PRIVILEGES; - 连接时未指定
--skip-ssl或证书不匹配,导致客户端连上但无法读取部分加密字段(如performance_schema.threads的PROCESSLIST_INFO),这不是权限问题,是连接参数问题
最小化授权示例(推荐生产使用)
比起全库 SELECT,更稳妥的做法是按审计需求精确授权:
GRANT SELECT ON performance_schema.events_statements_summary_by_digest TO 'auditor'@'%'; GRANT SELECT ON performance_schema.events_waits_summary_global_by_event_name TO 'auditor'@'%'; GRANT SELECT ON information_schema.TABLES TO 'auditor'@'%'; GRANT SELECT ON information_schema.STATISTICS TO 'auditor'@'%'; GRANT PROCESS ON *.* TO 'auditor'@'%'; FLUSH PRIVILEGES;
这样既满足主流审计系统对慢查询、索引、表结构的元数据采集需求,又避免开放 performance_schema.setup_* 等可配置表——那些一旦被误改会导致性能监控失效。
sys 库本身不用单独授权,只要 underlying schema 有权限,且 show_compatibility_56 开着,视图自然可查。真正容易被忽略的,是那个默认关掉的兼容性开关。


















