动态权限解决什么
MySQL 8.0 把过去笼统的 SUPER 拆成一族细粒度权限,统称动态权限:改全局系统变量、整库备份、管理复制、断开他人会话各自独立成一条。它们不必绑定固定范围,可以按操作精确授予,授权记录落在 mysql.global_grants 表里。目标是让最小授权写到具体动作,而不是继续用一把万能钥匙。
基本信息
| 适用版本 | MySQL 8.0 起;5.7 没有此机制 |
|---|---|
| 常见动态权限 | SYSTEM_VARIABLES_ADMIN、BACKUP_ADMIN、CONNECTION_ADMIN、REPLICATION_APPLIER、AUDIT_ADMIN |
| 授权范围 | 只能授到全局(ON *.*) |
| 存储位置 | mysql.global_grants |
| 查看方式 | SHOW GRANTS 会列出,global_grants 可批量筛查 |
| 相关标记 | SYSTEM_USER 把账号标记为系统用户 |
典型使用场景
- 备份账号只给 BACKUP_ADMIN,不再顺带拿到改参数的能力
- 运维工具账号按需拆成改参数、看进程、断会话几条权限
- 复制管理与应用者分开授权,从库运维与业务应用各持所需
- 接管 5.7 的授权脚本时把 SUPER 逐条映射成具体动态权限
- 把核心管理账号标记为 SYSTEM_USER,避免被同类账号影响
授权与核对
授权与核对
# 精确授权:备份、改参数、断会话分开给不同账号
GRANT BACKUP_ADMIN ON *.* TO 'backup'@'10.10.%';
GRANT SYSTEM_VARIABLES_ADMIN ON *.* TO 'ops'@'10.10.%';
GRANT CONNECTION_ADMIN ON *.* TO 'duty'@'10.10.%';
# 复制类:静态权限与动态权限按角色拆开
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'repl'@'10.0.%';
# 标记为系统用户
GRANT SYSTEM_USER ON *.* TO 'dba_master'@'127.0.0.1';
# 核对:SHOW GRANTS 会列出动态权限,批量筛查看系统表
SHOW GRANTS FOR 'backup'@'10.10.%';
SELECT user, host, priv FROM mysql.global_grants WHERE user = 'backup';旧 SUPER 能力对照
| 原来用 SUPER 做的事 | 8.0 对应动态权限 | 说明 |
|---|---|---|
| 修改全局系统变量 | SYSTEM_VARIABLES_ADMIN | 覆盖 SET GLOBAL 与 PERSIST |
| 做整库备份 | BACKUP_ADMIN | 整实例加锁等备份动作 |
| 断开其他会话 | CONNECTION_ADMIN | 配合 PROCESS 才能看到会话 |
| 从库管理 | REPLICATION_SLAVE_ADMIN 或 REPLICATION_APPLIER | 按管理者与应用者拆分 |
| 审计与插件类操作 | AUDIT_ADMIN | 插件装载与启停 |
| 标记账号属性 | SYSTEM_USER | 区分系统用户与普通用户 |
迁移到 8.0 时最常见的做法是「旧脚本报权限不足就把 SUPER 补上」,这会让最小授权彻底失效。更省事的路径是记录报错里的操作类型,查官方动态权限表找到对应条目,只补那一条。