MySQL 支持的权限

 下表汇总了可为 GRANT 和 REVOKE 语句指定的允许的静态和动态priv_type 权限类型,以及可授予每个权限的级别。 GRANT 和 REVOKE 语句允许的静态权限: 

权限含义和授权级别
ALL [PRIVILEGES]授予除 GRANT OPTION 和 PROXY 之外的在指定的访问级别的所有权限
ALTER启用 ALTER TABLE。级别:全局、数据库、表
ALTER ROUTINE允许更改或删除存储例程。级别:全局、数据库、例程。
CREATE启用数据库和表创建。级别:全局、数据库、表。
CREATE ROLE启用角色创建。级别:全局。
CREATE ROUTINE启用存储例程创建。级别:全局、数据库。
CREATE TABLESPACE允许创建、更改或删除表空间和日志文件组。级别:全局。
CREATE TEMPORARY TABLES启用 CREATE TEMPORARY TABLE。级别:全局、数据库。
CREATE USER启用 CREATE USER、DROP USER、RENAME USER 和 REVOKE ALL PRIVILEGES。级别:全局。
CREATE VIEW允许创建或更改视图。级别:全局、数据库、表。
DELETE启用 DELETE。级别:全局、数据库、表。
DROP允许删除数据库、表和视图。级别:全局、数据库、表。
DROP ROLE允许删除角色。级别:全局。
EVENT为事件调度器启用事件。级别:全局、数据库。
EXECUTE允许用户执行存储例程。级别:全局、数据库、例程。
FILE允许用户使服务器读取或写入文件。级别:全局。
GRANT OPTION允许向其他帐户授予权限或从中删除权限。级别:全局、数据库、表、例程、代理。
INDEX允许创建或删除索引。级别:全局、数据库、表。
INSERT启用 INSERT。级别:全局、数据库、表、列。
LOCK TABLES对具有 SELECT 权限的表启用 LOCK TABLES。级别:全局、数据库。
PROCESS用户使用 SHOW PROCESSLIST 查看所有进程。级别:全局。
PROXY启用用户代理。级别:从用户到用户。
REFERENCES启用外键创建。级别:全局、数据库、表、列。
RELOAD启用 FLUSH 操作。级别:全局。
REPLICATION CLIENT允许用户询问源服务器或副本服务器的位置。级别:全局。
REPLICATION SLAVE使副本能够从源读取二进制日志事件。级别:全局。
SELECT启用 SELECT。级别:全局、数据库、表、列。
SHOW DATABASES启用 SHOW DATABASES 以显示所有数据库。级别:全局。
SHOW VIEW启用 SHOW CREATE VIEW。级别:全局、数据库、表。
SHUTDOWN启用 mysqladmin shutdown。级别: 全局
SUPER允许使用其他管理操作,如 CHANGE REPLICATION SOURCE TO、CHANGE MASTER TO、KILL、PURGE BINARY LOGS、SET GLOBAL 和 mysqladmin debug 命令。级别:全局。
TRIGGER启用触发器操作。级别:全局、数据库、表。
UPDATE启用 UPDATE。级别:全局、数据库、表、列。
USAGE“无权限”的同义词

 GRANT 和 REVOKE 语句允许的动态权限: 

权限含义和授权级别
APPLICATION_PASSWORD_ADMIN启用双密码管理。级别:全局。
AUDIT_ADMIN启用审核日志配置。级别:全局。
BACKUP_ADMIN启用备份管理。级别:全局。
BINLOG_ADMIN启用二进制日志控制。级别:全局。
BINLOG_ENCRYPTION_ADMIN启用二进制日志加密的激活和停用。级别:全局。
CLONE_ADMIN启用克隆管理。级别:全局。
CONNECTION_ADMIN启用连接限制。级别:全局。
ENCRYPTION_KEY_ADMIN启用 InnoDB 秘钥变换:全局。
FIREWALL_ADMINEnable firewall rule administration, any user. Level: Global.
FIREWALL_USEREnable firewall rule administration, self. Level: Global.
FLUSH_OPTIMIZER_COSTS启用优化器消费重新加载。级别:全局。
FLUSH_STATUS启用状态指示器刷新。级别:全局。
FLUSH_TABLES启用表刷新。级别:全局。
FLUSH_USER_RESOURCES启用用户资源刷新。级别:全局。
GROUP_REPLICATION_ADMIN启用组复制控制。级别:全局。
INNODB_REDO_LOG_ENABLE启用或禁用重做日志记录。级别:全局。
INNODB_REDO_LOG_ARCHIVE启用重做日志存档管理。级别:全局。
NDB_STORED_USER启用SQL节点(NDB群集)之间的用户或角色共享。级别:全局。
PERSIST_RO_VARIABLES_ADMIN启用持久化只读系统变量。级别:全局。
REPLICATION_APPLIER作为复制通道的 PRIVILEGE_CHECKS_USER。级别:全局。
REPLICATION_SLAVE_ADMIN启用常规复制控制。级别:全局。
RESOURCE_GROUP_ADMIN启用资源组管理。级别:全局。
RESOURCE_GROUP_USER启用资源组管理。级别:全局。
ROLE_ADMIN允许授予或撤消角色,使用 WITH ADMIN OPTION。级别:全局。
SESSION_VARIABLES_ADMIN启用设置受限会话系统变量。级别:全局。
SET_USER_ID启用设置非自身 DEFINER 值。级别:全局。
SHOW_ROUTINE允许访问存储例程定义。级别:全局。
SYSTEM_USER将账户指定为系统账户。级别:全局。
SYSTEM_VARIABLES_ADMIN启用修改或持久化全局系统变量。级别:全局。
TABLE_ENCRYPTION_ADMIN启用覆盖默认加密设置。级别:全局。
VERSION_TOKEN_ADMIN启用版本令牌 UDF 的使用。级别:全局。
XA_RECOVER_ADMIN启用 XA RECOVER 执行。级别:全局。

 触发器与表相关联。要创建或删除触发器,必须具有表的,而不是触发器的 TRIGGER 权限。 在 GRANT 语句中,ALL [PRIVILEGES] 或 PROXY 权限必须自己命名,不能与其他权限一起指定。ALL [PRIVILEGES] 表示除 GRANT OPTION 和 PROXY 权限外,要授予权限的级别的所有可用权限。 MySQL 账户信息存储在 mysql 系统模式的表中。 如果授权表包含有大小写混合的数据库或表名的权限行,并且 lower_case_table_names 系统变量设置为非零值,则 REVOKE 不能用于撤销这些权限。在这种情况下,有必要直接操作授权表。(在设置lower_case_table_names 时 GRANT 不会创建行记录,但这些行可能是在设置该变量之前创建的。lower_case_table_names 设置只能在服务器启动时配置。) 根据 ON 子句使用的语法,可以在多个级别授予权限。对于 REVOKE,同样使用 ON 语法指定要删除的权限。 对于全局、数据库、表和例程级别,GRANT ALL 只分配正在授予的级别上存在的权限。例如,GRANT ALL ON db_name.* 是一个数据库级语句,因此它不授予任何仅限于全局的权限,如 FILE。全部授予不会分配 GRANT OPTION 或 PROXY 权限。 当分配的对象是表、存储函数或存储过程时,object_type 子句(如果存在)应指定为 TABLEFUNCTION 或 PROCEDURE 用户对数据库、表、列或例程所拥有的权限,在每个权限级别(包括全局级别)上以逻辑 OR 的形式附加形成帐户权限。不可能因为在较低级别没有权限而拒绝在较高级别授予的权限。例如,此语句授予全局 SELECT INSERT 权限: 


GRANT SELECT, INSERT ON *.* TO u1;
 
全局授予的权限适用于所有数据库、表和列,即使在这些较低级别中没有授予。 从 MySQL 8.0.16 开始,如果启用了 partial_revokes 系统变量,则可以通过为特定数据库撤销在全局级别授予的权限来显式拒绝该权限: 


GRANT SELECT, INSERT, UPDATE ON *.* TO u1;REVOKE INSERT, UPDATE ON db1.* FROM u1;
 
前面语句的结果是 SELECT 全局应用于所有表,而 INSERT 和 UPDATE 应用于除 db1 中的表之外的全局。账户对 db1 的访问是只读。 如果对一个用户使用表、列或例程权限,服务器会检查所有用户的表、列和例程权限,这会使 MySQL 的速度减慢。类似地,如果限制任何用户的查询、更新或连接数,服务器必须监视这些值。 MySQL 允许您对不存在的数据库或表授予权限。对于表,要授予的权限必须包括 CREATE 权限。此行为是故意的,旨在使数据库管理员能够为以后创建的数据库或表准备用户帐户和权限。 重要 当删除数据库或表时,MySQL 不会自动撤销任何权限。但是,如果删除某个例程,则为该例程授予的任何例程级别权限都将被撤销。