mysql的全局权限和非全局权限有哪些
MySQL 8.0 中的权限按作用范围可分为 全局权限 和 非全局权限(即数据库级、表级、列级、存储程序级等)。以下为你系统梳理:
✅ 一、全局权限(Global Privileges)
全局权限作用于整个 MySQL 服务器,适用于所有数据库和对象,存储在 mysql.user 和 mysql.global_grants 表中。
🔹 常见静态全局权限(Static)
| 权限名 |
说明 |
ALL PRIVILEGES |
除 GRANT OPTION 外的所有权限 |
CREATE USER |
创建、修改、删除用户 |
DROP |
删除数据库、表、视图等 |
ALTER |
修改表结构 |
CREATE |
创建数据库和表 |
FILE |
使用 LOAD DATA INFILE / SELECT INTO OUTFILE |
PROCESS |
查看所有线程(SHOW PROCESSLIST) |
RELOAD |
执行 FLUSH、RESET 等 |
REPLICATION SLAVE |
作为复制从库 |
REPLICATION CLIENT |
查看主从状态 |
SHUTDOWN |
关闭服务器 |
SUPER |
已废弃,建议用动态权限代替 |
GRANT OPTION |
允许将自身权限授予他人 |
🔹 动态全局权限(Dynamic,MySQL 8.0+)
| 权限名 |
说明 |
BACKUP_ADMIN |
备份管理(如 LOCK INSTANCE FOR BACKUP) |
CONNECTION_ADMIN |
替代 SUPER 中的连接控制 |
SHOW_ROUTINE |
查看所有存储过程/函数定义(非所有者) |
SYSTEM_VARIABLES_ADMIN |
设置全局系统变量 |
ROLE_ADMIN |
管理角色 |
XA_RECOVER_ADMIN |
执行 XA RECOVER |
BINLOG_ADMIN |
管理二进制日志 |
PERSIST_RO_VARIABLES_ADMIN |
持久化只读变量 |
SESSION_VARIABLES_ADMIN |
设置会话变量 |
SET_USER_ID |
设置非自身 DEFINER |
SKIP_QUERY_REWRITE |
禁止查询重写 |
SYSTEM_USER |
标记为系统账户 |
TABLE_ENCRYPTION_ADMIN |
表加密控制 |
TELEMETRY_LOG_ADMIN |
遥测日志配置 |
VERSION_TOKEN_ADMIN |
使用版本令牌函数 |
✅ 二、非全局权限(Non-Global Privileges)
非全局权限作用于特定数据库、表、列或存储对象,权限粒度更细。
🔸 数据库级权限(Database-level)
| 权限名 |
说明 |
SELECT、INSERT、UPDATE、DELETE |
对数据库中所有表的基础操作 |
CREATE、DROP、ALTER |
创建、删除、修改数据库中对象 |
CREATE ROUTINE |
创建存储过程/函数 |
ALTER ROUTINE |
修改/删除存储过程/函数 |
EXECUTE |
执行存储过程/函数 |
SHOW VIEW |
查看视图定义 |
EVENT |
管理事件调度器 |
LOCK TABLES |
显式锁表 |
🔸 表级权限(Table-level)
| 权限名 |
说明 |
SELECT、INSERT、UPDATE、DELETE |
对表的数据操作 |
CREATE、DROP、ALTER、INDEX |
表结构管理 |
TRIGGER |
创建/删除触发器 |
REFERENCES |
创建外键引用 |
🔸 列级权限(Column-level)
| 权限名 |
说明 |
SELECT、INSERT、UPDATE |
仅作用于某列 |
🔸 存储过程/函数级权限(Routine-level)
| 权限名 |
说明 |
EXECUTE |
执行存储过程/函数 |
ALTER ROUTINE |
修改/删除定义 |
GRANT OPTION |
授权他人执行或修改 |
✅ 权限分配示例
| 需求 |
示例授权 |
| 全局管理员 |
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%' WITH GRANT OPTION; |
| 数据库开发者 |
GRANT CREATE, ALTER, DROP, SELECT, INSERT, UPDATE, DELETE ON devdb.* TO 'dev'@'%'; |
| 只读用户 |
GRANT SELECT ON reportdb.* TO 'readonly'@'192.168.%'; |
| 执行存储过程 |
GRANT EXECUTE ON mydb.* TO 'app'@'%'; |
| 查看所有函数定义(非所有者) |
GRANT SHOW_ROUTINE ON *.* TO 'audit'@'%'; |
✅ 权限层级总结
| 层级 |
作用范围 |
存储表 |
| 全局级 |
所有数据库 |
mysql.user, mysql.global_grants |
| 数据库级 |
指定数据库 |
mysql.db |
| 表级 |
指定表 |
mysql.tables_priv |
| 列级 |
指定列 |
mysql.columns_priv |
| 存储程序级 |
指定 PROCEDURE/FUNCTION |
mysql.procs_priv |
如需快速查看所有权限支持范围,可执行:
SHOW PRIVILEGES;
这将列出 MySQL 支持的所有权限及其适用层级。