|
|
发表于 昨天 22:27
|
查看: 3 |
回复: 0
在数据库管理实践中,精确的权限控制是保障数据安全与系统稳定的基石。合理运用MySQL提供的权限体系,能够有效遵循“最小权限原则”,避免因账户权限过宽泛而带来的安全隐患。本文将系统梳理MySQL中的静态权限与动态权限列表,助你清晰地掌握每一项权限的具体作用与适用场景。
权限概览
MySQL的权限主要分为两大类:
- 静态权限:也称为“内置权限”,是MySQL服务器的固有权限,与特定的服务器功能(如建表、查询)直接绑定。其代码内建于服务器中,并持久化存储在系统表
mysql.user、mysql.db等中。
- 动态权限:在MySQL 8.0中引入,定义了在运行时执行的特定操作权限。这些权限并非预定义在服务器代码内,而是可以在运行时注册或注销,并仅存储在系统表
mysql.global_grants中。
静态权限列表
下表列出了MySQL中的主要静态权限及其作用范围。
| 权限 |
允许的操作 |
作用级别 |
ALL [PRIVILEGES] |
授予指定访问级别的所有权限,但不包括GRANT OPTION和PROXY。 |
根据授权语句指定 |
ALTER |
允许使用ALTER TABLE语句修改表结构。 |
Global, Database, Table |
ALTER ROUTINE |
允许修改或删除存储过程/函数(stored routines)。 |
Global, Database, Routine |
CREATE |
允许创建新的数据库和表。 |
Global, Database, Table |
CREATE ROLE |
允许创建新的角色(Role)。 |
Global |
CREATE ROUTINE |
允许创建存储过程/函数。 |
Global, Database |
CREATE TABLESPACE |
允许创建、更改或删除表空间和日志文件组。 |
Global |
CREATE TEMPORARY TABLES |
允许使用CREATE TEMPORARY TABLE创建临时表。 |
Global, Database |
CREATE USER |
允许使用CREATE USER、DROP USER、RENAME USER和REVOKE ALL PRIVILEGES语句管理用户。 |
Global |
CREATE VIEW |
允许创建或修改视图。 |
Global, Database, Table |
DELETE |
允许从表中删除数据。 |
Global, Database, Table |
DROP |
允许删除数据库、表和视图。 |
Global, Database, Table |
DROP ROLE |
允许删除角色。 |
Global |
EVENT |
启用Event Scheduler(事件调度器)的事件功能。 |
Global, Database |
EXECUTE |
允许用户执行存储过程/函数。 |
Global, Database, Routine |
FILE |
允许用户通过LOAD DATA INFILE或SELECT ... INTO OUTFILE读写服务器上的文件。 |
Global |
GRANT OPTION |
允许用户将自己拥有的权限授予其他账户,或从其他账户收回权限。 |
Global, Database, Table, Routine, Proxy |
INDEX |
允许创建或删除索引。 |
Global, Database, Table |
INSERT |
允许向表中插入数据。 |
Global, Database, Table, Column |
LOCK TABLES |
允许对拥有SELECT权限的表使用LOCK TABLES语句。 |
Global, Database |
PROCESS |
允许用户使用SHOW PROCESSLIST查看所有进程。 |
Global |
PROXY |
启用用户代理功能。 |
User |
REFERENCES |
启用外键约束的创建(在InnoDB中等效于REFERENCES权限)。 |
Global, Database, Table, Column |
RELOAD |
启用FLUSH系列操作,如FLUSH TABLES。 |
Global |
REPLICATION CLIENT |
允许用户查询主从复制中源服务器或副本服务器的状态(如SHOW MASTER STATUS)。 |
Global |
REPLICATION SLAVE |
允许副本服务器从源服务器读取二进制日志事件,用于数据复制。 |
Global |
SELECT |
允许从表中查询数据。 |
Global, Database, Table, Column |
SHOW DATABASES |
允许使用SHOW DATABASES查看所有数据库列表。 |
Global |
SHOW VIEW |
允许使用SHOW CREATE VIEW查看视图定义。 |
Global, Database, Table |
SHUTDOWN |
允许使用mysqladmin shutdown命令关闭MySQL服务器。 |
Global |
SUPER |
启用一系列高级管理操作,如CHANGE REPLICATION SOURCE TO、KILL(终止非本用户线程)、PURGE BINARY LOGS、SET GLOBAL设置全局变量等。 |
Global |
TRIGGER |
允许进行触发器相关操作(创建、删除、执行)。 |
Global, Database, Table |
UPDATE |
允许更新表中的数据。 |
Global, Database, Table, Column |
USAGE |
“无权限”的同义词。在创建用户时授予此权限,表示该用户拥有连接权限,但没有任何数据操作权限。 |
Global |
动态权限列表(MySQL 8.0+)
动态权限为后端开发和DBA提供了更细粒度的控制能力,尤其适用于管理高级的服务器功能和安全特性。
| 权限 |
允许的操作 |
作用级别 |
APPLICATION_PASSWORD_ADMIN |
启用双密码管理(用于密码轮换)。 |
Global |
AUDIT_ABORT_EXEMPT |
允许执行被审计日志过滤器(audit log filter)阻止的查询。 |
Global |
AUDIT_ADMIN |
启用审计日志(audit log)的配置管理。 |
Global |
AUTHENTICATION_POLICY_ADMIN |
启用身份验证策略管理。 |
Global |
BACKUP_ADMIN |
启用备份管理操作权限。 |
Global |
BINLOG_ADMIN |
启用二进制日志(binary log)的控制权限。 |
Global |
BINLOG_ENCRYPTION_ADMIN |
启用和禁用二进制日志加密。 |
Global |
CLONE_ADMIN |
启用克隆(Clone)操作的管理权限。 |
Global |
CONNECTION_ADMIN |
启用连接限制与控制。 |
Global |
ENCRYPTION_KEY_ADMIN |
启用InnoDB主加密密钥的轮换操作。 |
Global |
FIREWALL_ADMIN |
启用防火墙规则管理(任何用户均可管理)。 |
Global |
FIREWALL_EXEMPT |
允许用户不受防火墙规则限制。 |
Global |
FIREWALL_USER |
启用用户管理自身防火墙规则的权限。 |
Global |
FLUSH_OPTIMIZER_COSTS |
启用优化器成本(optimizer costs)的重新加载。 |
Global |
FLUSH_STATUS |
启用状态指示器(status indicators)的刷新。 |
Global |
FLUSH_TABLES |
启用表的刷新(flush)操作。 |
Global |
FLUSH_USER_RESOURCES |
启用用户资源(user-resource)的刷新。 |
Global |
GROUP_REPLICATION_ADMIN |
启用组复制(Group Replication)的控制权限。 |
Global |
INNODB_REDO_LOG_ARCHIVE |
启用重做日志(redo log)归档管理。 |
Global |
INNODB_REDO_LOG_ENABLE |
启用或禁用重做日志记录。 |
Global |
NDB_STORED_USER |
启用NDB集群(NDB Cluster)中SQL节点之间的用户或角色共享。 |
Global |
PASSWORDLESS_USER_ADMIN |
启用无密码用户账户的管理。 |
Global |
PERSIST_RO_VARIABLES_ADMIN |
启用只读系统变量的持久化。 |
Global |
REPLICATION_APPLIER |
允许担任复制通道的PRIVILEGE_CHECKS_USER。 |
Global |
REPLICATION_SLAVE_ADMIN |
启用常规复制的控制权限。 |
Global |
RESOURCE_GROUP_ADMIN |
启用资源组(resource group)的管理。 |
Global |
RESOURCE_GROUP_USER |
启用会话级别的资源组管理。 |
Global |
ROLE_ADMIN |
允许授予或收回角色时使用WITH ADMIN OPTION,赋予角色管理权。 |
Global |
SESSION_VARIABLES_ADMIN |
启用设置受限制的会话系统变量。 |
Global |
SET_USER_ID |
允许为非自身账户的对象设置DEFINER值。 |
Global |
SHOW_ROUTINE |
允许用户访问存储过程/函数的定义,即使该用户没有EXECUTE权限。 |
Global |
SKIP_QUERY_REWRITE |
不对该用户执行的查询进行重写(Query Rewrite)。 |
Global |
SYSTEM_USER |
指定账户为系统账户,拥有更高层级的安全属性。 |
Global |
SYSTEM_VARIABLES_ADMIN |
允许修改或持久化全局系统变量。 |
Global |
TABLE_ENCRYPTION_ADMIN |
启用覆盖默认表加密设置的能力。 |
Global |
TELEMETRY_LOG_ADMIN |
(针对AWS MySQL HeatWave)启用遥测日志配置。 |
Global |
TP_CONNECTION_ADMIN |
启用线程池(thread pool)连接的管理。 |
Global |
VERSION_TOKEN_ADMIN |
启用版本令牌(Version Tokens)相关函数的管理。 |
Global |
XA_RECOVER_ADMIN |
允许执行XA RECOVER语句。 |
Global |
总结
掌握MySQL的静态与动态权限是实施精细化云原生数据库访问控制的关键。静态权限涵盖了绝大多数传统的数据定义与操作,而动态权限则提供了面向现代数据库高级特性的精细化管理能力。在实际授权时,应优先考虑使用角色(Role)来封装一组权限,再将其授予用户,这将极大简化权限管理流程并提升安全性。
|
上一篇:汇川PLC编程:CONTINUE指令在循环控制中的实战详解与EXIT指令对比下一篇:SQL多表联合查询实战指南:从基础连接到复杂统计分析
|