### 6.2.2 MySQL提供的权限

授予MySQL帐户的权限决定了该帐户可以执行哪些操作。MySQL权限在应用的上下文和不同的操作级别上有所不同：

-   管理权限允许用户管理MySQL服务器的操作。这些权限是全局的，因为它们不是特定于特定数据库的。

-   数据库权限应用于数据库及其内的所有对象。可以为特定数据库授予这些权限，也可以全局授予这些权限，使其适用于所有数据库。

-   可以为数据库中的特定对象、数据库中给定类型的所有对象（例如，数据库中的所有表）或所有数据库中给定类型的所有对象全局授予数据库对象（如表、索引、视图和存储例程）的权限。

    特权在静态（内置于服务器）还是动态（在运行时定义）方面也有所不同。特权是静态的还是动态的会影响授予用户帐户和角色的可用性。有关静态和动态权限之间差异的信息，请参阅[静态权限与动态权限](privileges-provided.html#static-dynamic-privileges).)

    有关帐户权限的信息存储在`mysql`系统数据库。有关这些表格的结构和内容的说明，请参阅[第6.2.3节“拨款表”](grant-tables.html).MySQL服务器在启动时将grant表的内容读取到内存中，并在中指示的情况下重新加载它们[第6.2.13节“特权变更生效时”](privilege-changes.html).服务器根据授权表的内存副本做出访问控制决策。

重要的

一些MySQL版本对grant表进行了更改，以添加新的特权或功能。为了确保可以利用任何新功能，请在升级MySQL时将grant表更新为当前结构。看见[第2.11节，“升级MySQL”](upgrading.html).

以下部分总结了可用的特权，提供了每个特权的更详细描述，并提供了使用指南。

-   [可用特权摘要](privileges-provided.html#privileges-provided-summary)

-   [静态权限描述](privileges-provided.html#privileges-provided-static)

-   [动态权限描述](privileges-provided.html#privileges-provided-dynamic)

-   [特权授予指南](privileges-provided.html#privileges-provided-guidelines)

-   [静态权限与动态权限](privileges-provided.html#static-dynamic-privileges)

-   [将帐户从超级权限迁移到动态权限](privileges-provided.html#dynamic-privileges-migration-from-super)

#### 可用特权摘要

下表显示了中使用的静态特权名称[`授予`](grant.html)和[`撤销`](revoke.html)语句，以及与grant表中每个权限相关联的列名，以及应用该权限的上下文。

[](<>)

**表6.2授予和撤销的允许静态权限**

| 特权 | 格兰特表列 | 上下文 |
| --- | ----- | --- |
| [`所有[特权]`](privileges-provided.html#priv_all) | “所有特权”的同义词 | 服务器管理 |
| [`改变`](privileges-provided.html#priv_alter) | `私处` | 桌子 |
| [`改变常规`](privileges-provided.html#priv_alter-routine) | `改变常规` | 存储例程 |
| [`创造`](privileges-provided.html#priv_create) | `创建私有` | 数据库、表或索引 |
| [`创建角色`](privileges-provided.html#priv_create-role) | `创建角色` | 服务器管理 |
| [`创建例行程序`](privileges-provided.html#priv_create-routine) | `创建_例程_priv` | 存储例程 |
| [`创建表空间`](privileges-provided.html#priv_create-tablespace) | `创建表空间` | 服务器管理 |
| [`创建临时表`](privileges-provided.html#priv_create-temporary-tables) | `创建_tmp_table_priv` | 桌子 |
| [`创建用户`](privileges-provided.html#priv_create-user) | `创建_user _priv` | 服务器管理 |
| [`创建视图`](privileges-provided.html#priv_create-view) | `创建视图` | 意见 |
| [`删去`](privileges-provided.html#priv_delete) | `删除_priv` | 桌子 |
| [`滴`](privileges-provided.html#priv_drop) | `私人投递` | 数据库、表或视图 |
| [`放弃角色`](privileges-provided.html#priv_drop-role) | `放弃角色` | 服务器管理 |
| [`事件`](privileges-provided.html#priv_event) | `私人活动` | 数据库 |
| [`处决`](privileges-provided.html#priv_execute) | `私自处决` | 存储例程 |
| [`文件`](privileges-provided.html#priv_file) | `私人文件` | 服务器主机上的文件访问 |
| [`授予期权`](privileges-provided.html#priv_grant-option) | `格兰特普里夫酒店` | 数据库、表或存储的例程 |
| [`指数`](privileges-provided.html#priv_index) | `私人索引` | 桌子 |
| [`插入`](privileges-provided.html#priv_insert) | `插入_priv` | 表或列 |
| [`锁桌`](privileges-provided.html#priv_lock-tables) | `锁桌` | 数据库 |
| [`过程`](privileges-provided.html#priv_process) | `私人程序` | 服务器管理 |
| [`代理`](privileges-provided.html#priv_proxy) | 看见`私人代理人`桌子 | 服务器管理 |
| [`推荐人`](privileges-provided.html#priv_references) | `参考资料` | 数据库或表 |
| [`重新加载`](privileges-provided.html#priv_reload) | `重新加载` | 服务器管理 |
| [`复制客户端`](privileges-provided.html#priv_replication-client) | `回复客户私人` | 服务器管理 |
| [`复制从机`](privileges-provided.html#priv_replication-slave) | `Repl_slave_priv` | 服务器管理 |
| [`选择`](privileges-provided.html#priv_select) | `选择_priv` | 表或列 |
| [`显示数据库`](privileges-provided.html#priv_show-databases) | `展示你的隐私` | 服务器管理 |
| [`显示视图`](privileges-provided.html#priv_show-view) | `显示视图` | 意见 |
| [`关闭`](privileges-provided.html#priv_shutdown) | `秘密关闭` | 服务器管理 |
| [`超级的`](privileges-provided.html#priv_super) | `超级私人` | 服务器管理 |
| [`触发`](privileges-provided.html#priv_trigger) | `扳机` | 桌子 |
| [`使现代化`](privileges-provided.html#priv_update) | `更新_priv` | 表或列 |
| [`用法`](privileges-provided.html#priv_usage) | “没有特权”的同义词 | 服务器管理 |

下表显示了中使用的动态权限名称[`授予`](grant.html)和[`撤销`](revoke.html)语句，以及特权应用的上下文。

[](<>)

**表6.3授予和撤销的允许动态权限**

| 特权 | 上下文 |
| --- | --- |
| [`应用程序\密码\管理员`](privileges-provided.html#priv_application-password-admin) | 双重密码管理 |
| [`审计_中止_豁免`](privileges-provided.html#priv_audit-abort-exempt) | 允许被审核日志筛选器阻止的查询 |
| [`审计及行政`](privileges-provided.html#priv_audit-admin) | 审核日志管理 |
| [`身份验证\u策略\u管理`](privileges-provided.html#priv_authentication-policy-admin) | 认证管理 |
| [`备份管理`](privileges-provided.html#priv_backup-admin) | 备份管理 |
| [`BINLOG_管理员`](privileges-provided.html#priv_binlog-admin) | 备份和复制管理 |
| [`BINLOG_加密_管理`](privileges-provided.html#priv_binlog-encryption-admin) | 备份和复制管理 |
| [`克隆管理员`](privileges-provided.html#priv_clone-admin) | 克隆管理 |
| [`连接管理`](privileges-provided.html#priv_connection-admin) | 服务器管理 |
| [`加密_密钥_管理员`](privileges-provided.html#priv_encryption-key-admin) | 服务器管理 |
| [`防火墙管理`](privileges-provided.html#priv_firewall-admin) | 防火墙管理 |
| [`免防火墙`](privileges-provided.html#priv_firewall-exempt) | 防火墙管理 |
| [`防火墙用户`](privileges-provided.html#priv_firewall-user) | 防火墙管理 |
| [`刷新优化器成本`](privileges-provided.html#priv_flush-optimizer-costs) | 服务器管理 |
| [`刷新状态`](privileges-provided.html#priv_flush-status) | 服务器管理 |
| [`冲水桌`](privileges-provided.html#priv_flush-tables) | 服务器管理 |
| [`刷新用户资源`](privileges-provided.html#priv_flush-user-resources) | 服务器管理 |
| [`组\复制\管理员`](privileges-provided.html#priv_group-replication-admin) | 复制管理 |
| [`组\u复制\u流`](privileges-provided.html#priv_group-replication-stream) | 复制管理 |
| [`INNODB_重做_日志_存档`](privileges-provided.html#priv_innodb-redo-log-archive) | 重做日志归档管理 |
| [`NDB_存储用户`](privileges-provided.html#priv_ndb-stored-user) | 存储引擎 |
| [`无密码用户管理员`](privileges-provided.html#priv_passwordless-user-admin) | 认证管理 |
| [`持久化变量管理`](privileges-provided.html#priv_persist-ro-variables-admin) | 服务器管理 |
| [`复制应用程序`](privileges-provided.html#priv_replication-applier) | `权限检查用户`对于复制通道 |
| [`复制_从_管理`](privileges-provided.html#priv_replication-slave-admin) | 复制管理 |
| [`资源组管理员`](privileges-provided.html#priv_resource-group-admin) | 资源组管理 |
| [`资源组用户`](privileges-provided.html#priv_resource-group-user) | 资源组管理 |
| [`角色管理`](privileges-provided.html#priv_role-admin) | 服务器管理 |
| [`会话变量管理`](privileges-provided.html#priv_session-variables-admin) | 服务器管理 |
| [`设置用户ID`](privileges-provided.html#priv_set-user-id) | 服务器管理 |
| [`表演例行公事`](privileges-provided.html#priv_show-routine) | 服务器管理 |
| [`系统用户`](privileges-provided.html#priv_system-user) | 服务器管理 |
| [`系统变量管理`](privileges-provided.html#priv_system-variables-admin) | 服务器管理 |
| [`表_加密_管理`](privileges-provided.html#priv_table-encryption-admin) | 服务器管理 |
| [`版本\令牌\管理员`](privileges-provided.html#priv_version-token-admin) | 服务器管理 |
| [`XA_RECOVER_ADMIN`](privileges-provided.html#priv_xa-recover-admin) | 服务器管理 |

#### 静态权限描述

静态权限内置于服务器中，而动态权限是在运行时定义的。下面的列表描述了MySQL中可用的每个静态权限。

特定的SQL语句可能具有比此处所述更具体的权限要求。如果是这样的话，有关声明的描述将提供详细信息。

-   [](<>) [`全部的`](privileges-provided.html#priv_all), [`所有特权`](privileges-provided.html#priv_all)

    [](<>)[](<>)[](<>)[](<>)

    这些特权说明符是“给定特权级别上可用的所有特权”（除[`授予期权`](privileges-provided.html#priv_grant-option)).例如，授予[`全部的`](privileges-provided.html#priv_all)在全局或表级别分别授予所有全局权限或所有表级别权限。

-   [](<>) [`改变`](privileges-provided.html#priv_alter)

    [](<>)[](<>)

    允许使用[`改变桌子`](alter-table.html)语句来更改表的结构。[`改变桌子`](alter-table.html)还需要[`创造`](privileges-provided.html#priv_create)和[`插入`](privileges-provided.html#priv_insert)特权。重命名表需要[`改变`](privileges-provided.html#priv_alter)和[`滴`](privileges-provided.html#priv_drop)在旧桌子上，[`创造`](privileges-provided.html#priv_create)和[`插入`](privileges-provided.html#priv_insert)在新桌子上。

-   [](<>) [`改变常规`](privileges-provided.html#priv_alter-routine)

    [](<>)[](<>)

    允许使用更改或删除存储例程（存储过程和函数）的语句。对于权限授予范围内的例程，以及用户不是被命名为例程的用户的例程`定义者`，还允许访问例程定义以外的例程属性。

-   [](<>) [`创造`](privileges-provided.html#priv_create)

    [](<>)[](<>)

    允许使用创建新数据库和表的语句。

-   [](<>) [`创建角色`](privileges-provided.html#priv_create-role)

    [](<>)[](<>)

    允许使用[`创建角色`](create-role.html)陈述(小标题)[`创建用户`](privileges-provided.html#priv_create-user)特权还允许使用[`创建角色`](create-role.html)声明。）看见[第6.2.10节“使用角色”](roles.html).

    这个[`创建角色`](privileges-provided.html#priv_create-role)和[`放弃角色`](privileges-provided.html#priv_drop-role)特权没有权力那么强大[`创建用户`](privileges-provided.html#priv_create-user)因为它们只能用于创建和删除帐户。它们不能用作[`创建用户`](privileges-provided.html#priv_create-user)可以修改帐户属性或重命名帐户。看见[用户和角色互换性](roles.html#role-user-interchangeability).

-   [](<>) [`创建例行程序`](privileges-provided.html#priv_create-routine)

    [](<>)[](<>)

    允许使用创建存储例程（存储过程和函数）的语句。对于权限授予范围内的例程，以及用户不是被命名为例程的用户的例程`定义者`，还允许访问例程定义以外的例程属性。

-   [](<>) [`创建表空间`](privileges-provided.html#priv_create-tablespace)

    [](<>)[](<>)

    允许使用创建、更改或删除表空间和日志文件组的语句。

-   [](<>) [`创建临时表`](privileges-provided.html#priv_create-temporary-tables)

    [](<>)[](<>)

    允许使用创建临时表[`创建临时表`](create-temporary-table.html)陈述

    [](<>)[](<>)

    会话创建临时表后，服务器不再对该表执行进一步的权限检查。创建会话可以对表执行任何操作，例如[`升降台`](drop-table.html), [`插入`](insert.html), [`使现代化`](update.html)或[`选择`](select.html)。有关更多信息，请参阅[第13.1.20.2节，“创建临时表语句”](create-temporary-table.html).

-   [](<>) [`创建用户`](privileges-provided.html#priv_create-user)

    [](<>)[](<>)

    允许使用[`改变用户`](alter-user.html), [`创建角色`](create-role.html), [`创建用户`](create-user.html), [`放弃角色`](drop-role.html), [`删除用户`](drop-user.html), [`重命名用户`](rename-user.html)和[`撤销所有特权`](revoke.html)声明。

-   [](<>) [`创建视图`](privileges-provided.html#priv_create-view)

    [](<>)[](<>)

    允许使用[`创建视图`](create-view.html)陈述

-   [](<>) [`删去`](privileges-provided.html#priv_delete)

    [](<>)[](<>)

    允许从数据库中的表中删除行。

-   [](<>) [`滴`](privileges-provided.html#priv_drop)

    [](<>)[](<>)

    允许使用删除（删除）现有数据库、表和视图的语句。这个[`滴`](privileges-provided.html#priv_drop)使用`改变桌子。。。放置分区`分区表上的语句。这个[`滴`](privileges-provided.html#priv_drop)特权也是必须的[`截断表`](truncate-table.html).

-   [](<>) [`放弃角色`](privileges-provided.html#priv_drop-role)

    [](<>)[](<>)

    允许使用[`放弃角色`](drop-role.html)陈述(小标题)[`创建用户`](privileges-provided.html#priv_create-user)特权还允许使用[`放弃角色`](drop-role.html)声明。）看见[第6.2.10节“使用角色”](roles.html).

    这个[`创建角色`](privileges-provided.html#priv_create-role)和[`放弃角色`](privileges-provided.html#priv_drop-role)特权没有权力那么强大[`创建用户`](privileges-provided.html#priv_create-user)因为它们只能用于创建和删除帐户。它们不能用作[`创建用户`](privileges-provided.html#priv_create-user)可以修改帐户属性或重命名帐户。看见[用户和角色互换性](roles.html#role-user-interchangeability).

-   [](<>) [`事件`](privileges-provided.html#priv_event)

    [](<>)[](<>)

    允许使用为事件计划程序创建、更改、删除或显示事件的语句。

-   [](<>) [`处决`](privileges-provided.html#priv_execute)

    [](<>)[](<>)

    允许使用执行存储例程（存储过程和函数）的语句。对于权限授予范围内的例程，以及用户不是被命名为例程的用户的例程`定义者`，还允许访问例程定义以外的例程属性。

-   [](<>) [`文件`](privileges-provided.html#priv_file)

    [](<>)[](<>)

    影响以下操作和服务器行为：

    -   使用启用在服务器主机上读取和写入文件[`加载数据`](load-data.html)和[`选择到外边去`](select-into.html)声明和[`加载_文件（）`](string-functions.html#function_load-file)作用拥有[`文件`](privileges-provided.html#priv_file)特权可以读取服务器主机上的任何文件，这些文件可以是全球可读的，也可以是MySQL服务器可读的。（这意味着用户可以读取任何数据库目录中的任何文件，因为服务器可以访问这些文件中的任何一个。）

    -   允许在MySQL服务器具有写访问权限的任何目录中创建新文件。这包括服务器的数据目录，其中包含实现特权表的文件。

    -   允许使用`数据目录`或`索引目录`表选项[`创建表格`](create-table.html)陈述

        作为安全措施，服务器不会覆盖现有文件。

        要限制文件的读写位置，请设置[`安全文件`](server-system-variables.html#sysvar_secure_file_priv)将系统变量添加到特定目录。看见[第5.1.8节“服务器系统变量”](server-system-variables.html).

-   [](<>) [`授予期权`](privileges-provided.html#priv_grant-option)

    [](<>)[](<>)

    允许您向其他用户授予或撤销您自己拥有的特权。

-   [](<>) [`指数`](privileges-provided.html#priv_index)

    [](<>)[](<>)

    允许使用创建或删除（删除）索引的语句。[`指数`](privileges-provided.html#priv_index)适用于现有表。如果你有[`创造`](privileges-provided.html#priv_create)对于表，您可以在[`创建表格`](create-table.html)陈述

-   [](<>) [`插入`](privileges-provided.html#priv_insert)

    [](<>)[](<>)

    允许将行插入数据库中的表中。[`插入`](privileges-provided.html#priv_insert)也需要[`分析表`](analyze-table.html), [`优化表格`](optimize-table.html)和[`修理台`](repair-table.html)表维护声明。

-   [](<>) [`锁桌`](privileges-provided.html#priv_lock-tables)

    [](<>)[](<>)

    允许使用显式[`锁桌`](lock-tables.html)语句来锁定具有[`选择`](privileges-provided.html#priv_select)特权这包括使用写锁，防止其他会话读取锁定的表。

-   [](<>) [`过程`](privileges-provided.html#priv_process)

    [](<>)[](<>)

    这个[`过程`](privileges-provided.html#priv_process)特权控制对服务器内执行的线程信息（即会话执行的语句信息）的访问。使用[`显示进程列表`](show-processlist.html)声明[**mysqladmin进程列表**](mysqladmin.html)指挥部[`信息模式。进程列表`](information-schema-processlist-table.html)表和性能模式[`进程列表`](performance-schema-processlist-table.html)表格如下：

    -   和[`过程`](privileges-provided.html#priv_process)特权，用户可以访问所有线程的信息，甚至是属于其他用户的线程。

    -   没有[`过程`](privileges-provided.html#priv_process)特权，非匿名用户可以访问关于自己线程的信息，但其他用户不能访问线程，匿名用户不能访问线程信息。

    笔记

    性能模式[`线程`](performance-schema-threads-table.html)表还提供线程信息，但表访问使用不同的权限模型。看见[第27.12.21.6节，“螺纹表”](performance-schema-threads-table.html).

    这个[`过程`](privileges-provided.html#priv_process)特权还允许使用[`展示引擎`](show-engine.html)声明，访问`信息模式` `InnoDB`表（名称以开头的表）`INNODB_`)，以及（从MySQL 8.0.21开始）访问`信息模式` [`文件夹`](information-schema-files-table.html)桌子

-   [](<>) [`代理`](privileges-provided.html#priv_proxy)

    [](<>)[](<>)

    允许一个用户模拟或成为另一个用户。看见[第6.2.19节“代理用户”](proxy-users.html).

-   [](<>) [`推荐人`](privileges-provided.html#priv_references)

    [](<>)[](<>)

    创建外键约束需要[`推荐人`](privileges-provided.html#priv_references)父表的权限。

-   [](<>) [`重新加载`](privileges-provided.html#priv_reload)

    [](<>)[](<>)

    这个[`重新加载`](privileges-provided.html#priv_reload)启用以下操作：

    -   使用[`脸红`](flush.html)陈述

    -   使用[**mysqladmin**](mysqladmin.html)相当于[`脸红`](flush.html)操作：`同花顺的主人`, `刷新日志`, `同花顺特权`, `刷新状态`, `冲水桌`, `齐平螺纹`, `刷新`和`重新加载`.

        这个`重新加载`命令告诉服务器将授权表重新加载到内存中。`同花顺特权`是的同义词`重新加载`这个`刷新`命令关闭并重新打开日志文件，并刷新所有表。其他的`冲洗-*`xxx`*`命令执行的功能与`刷新`，但更具体，在某些情况下可能更可取。例如，如果只想刷新日志文件，`刷新日志`是一个比`刷新`.

    -   使用[**mysqldump**](mysqldump.html)可执行各种操作的选项[`脸红`](flush.html)操作：[`--刷新日志`](mysqldump.html#option_mysqldump_flush-logs)和[`--主数据`](mysqldump.html#option_mysqldump_master-data).

    -   使用[`重置主机`](reset-master.html)和[`重置副本`](reset-replica.html)（或MySQL 8.0.22之前的版本，[`重置从机`](reset-slave.html))声明。

-   [](<>) [`复制客户端`](privileges-provided.html#priv_replication-client)

    [](<>)[](<>)

    允许使用[`显示主机状态`](show-master-status.html), [`显示副本状态`](show-replica-status.html)和[`显示二进制日志`](show-binary-logs.html)声明。

-   [](<>) [`复制从机`](privileges-provided.html#priv_replication-slave)

    [](<>)[](<>)

    使帐户能够使用请求对复制源服务器上的数据库进行更新[`显示副本`](show-replicas.html)（或MySQL 8.0.22之前的版本，[`显示从主机`](show-slave-hosts.html)), [`显示RELAYLOG事件`](show-relaylog-events.html)和[`显示BINLOG事件`](show-binlog-events.html)声明。使用[**mysqlbinlog**](mysqlbinlog.html)选项[`--从远程服务器读取`](mysqlbinlog.html#option_mysqlbinlog_read-from-remote-server) (`-R`), [`--从远程源读取`](mysqlbinlog.html#option_mysqlbinlog_read-from-remote-source)和[`--从远程主机读取`](mysqlbinlog.html#option_mysqlbinlog_read-from-remote-master)。将此权限授予副本用来连接到当前服务器作为其复制源服务器的帐户。

-   [](<>) [`选择`](privileges-provided.html#priv_select)

    [](<>)[](<>)

    允许从数据库中的表中选择行。[`选择`](select.html)声明要求[`选择`](privileges-provided.html#priv_select)只有当他们实际访问表时才有特权。一些[`选择`](select.html)语句不访问表，可以在没有任何数据库权限的情况下执行。例如，你可以使用[`选择`](select.html)作为计算不引用表的表达式的简单计算器：

    ```
    SELECT 1+1;
    SELECT PI()*2;
    ```

    这个[`选择`](privileges-provided.html#priv_select)其他读取列值的语句也需要特权。例如[`选择`](privileges-provided.html#priv_select)对于在文档右侧引用的列，需要*`上校的名字`*=*`expr`*分配到[`使现代化`](update.html)语句或中指定的列`哪里`条款[`删去`](delete.html)或[`使现代化`](update.html)声明。

    这个[`选择`](privileges-provided.html#priv_select)与一起使用的表或视图需要特权[`解释`](explain.html)，包括视图定义中的所有基础表。

-   [](<>) [`显示数据库`](privileges-provided.html#priv_show-databases)

    [](<>)[](<>)

    通过发出`显示数据库`陈述不具有此权限的帐户只能查看其具有某些权限的数据库，如果服务器是用[`--跳过显示数据库`](server-options.html#option_mysqld_skip-show-database)选项

    小心

    因为任何静态全局权限都被视为所有数据库的权限，所以任何静态全局权限都允许用户使用[`显示数据库`](show-databases.html)或者通过检查[`图式`](information-schema-schemata-table.html)表格`信息模式`，但因部分撤销而在数据库级别受到限制的数据库除外。

-   [](<>) [`显示视图`](privileges-provided.html#priv_show-view)

    [](<>)[](<>)

    允许使用[`显示创建视图`](show-create-view.html)陈述与一起使用的视图也需要此权限[`解释`](explain.html).

-   [](<>) [`关闭`](privileges-provided.html#priv_shutdown)

    [](<>)[](<>)

    允许使用[`关闭`](shutdown.html)和[`重新启动`](restart.html)声明[**关闭**](mysqladmin.html)命令，以及[`mysql_shutdown（）`](https://dev.mysql.com/doc/c-api/8.0/en/mysql-shutdown.html)C API函数。

-   [](<>) [`超级的`](privileges-provided.html#priv_super)

    [](<>)[](<>)

    [`超级的`](privileges-provided.html#priv_super)这是一项强大而深远的特权，不应轻易授予。如果一个帐户只需要执行[`超级的`](privileges-provided.html#priv_super)操作时，可以通过授予一个或多个动态权限来实现所需的权限集，每个动态权限都会授予更有限的功能。看见[动态权限描述](privileges-provided.html#privileges-provided-dynamic).

    笔记

    [`超级的`](privileges-provided.html#priv_super)已弃用，您应该期望在MySQL的未来版本中删除它。看见[将帐户从超级权限迁移到动态权限](privileges-provided.html#dynamic-privileges-migration-from-super).

    [`超级的`](privileges-provided.html#priv_super)影响以下操作和服务器行为：

    -   在运行时启用系统变量更改：

        -   启用对全局系统变量的服务器配置更改[`设置全局`](set-variable.html)和[`设定持续时间`](set-variable.html).

            相应的动态权限是[`系统变量管理`](privileges-provided.html#priv_system-variables-admin).

        -   启用设置需要特殊权限的受限会话系统变量。

            相应的动态权限是[`会话变量管理`](privileges-provided.html#priv_session-variables-admin).

            另见[第5.1.9.1节，“系统变量权限”](system-variable-privileges.html).

    -   启用对全局事务特征的更改（请参见[第13.3.7节“设置交易报表”](set-transaction.html)).

        相应的动态权限是[`系统变量管理`](privileges-provided.html#priv_system-variables-admin).

    -   使帐户能够启动和停止复制，包括组复制。

        相应的动态权限是[`复制_从_管理`](privileges-provided.html#priv_replication-slave-admin)对于定期复制，[`组\复制\管理员`](privileges-provided.html#priv_group-replication-admin)用于组复制。

    -   允许使用[`将复制源更改为`](change-replication-source-to.html)声明（来自MySQL 8.0.23），[`将主机更改为`](change-master-to.html)声明（MySQL 8.0.23之前），以及[`更改复制筛选器`](change-replication-filter.html)声明。

        相应的动态权限是[`复制_从_管理`](privileges-provided.html#priv_replication-slave-admin).

    -   通过以下方式启用二进制日志控制：[`清除二进制日志`](purge-binary-logs.html)和[`宾洛格`](binlog.html)声明。

        相应的动态权限是[`BINLOG_管理员`](privileges-provided.html#priv_binlog-admin).

    -   允许在执行视图或存储程序时设置有效的授权ID。具有此权限的用户可以在中指定任何帐户`定义者`视图或存储程序的属性。

        相应的动态权限是[`设置用户ID`](privileges-provided.html#priv_set-user-id).

    -   允许使用[`创建服务器`](create-server.html), [`改变服务器`](alter-server.html)和[`投递服务器`](drop-server.html)声明。

    -   允许使用[**mysqladmin调试**](mysqladmin.html)命令

    -   使能够`InnoDB`加密密钥轮换。

        相应的动态权限是[`加密_密钥_管理员`](privileges-provided.html#priv_encryption-key-admin).

    -   启用版本标记函数的执行。

        相应的动态权限是[`版本\令牌\管理员`](privileges-provided.html#priv_version-token-admin).

    -   允许授予和取消角色，使用`带管理员选项`合同条款[`授予`](grant.html)声明，非空`<graphml>`结果中的元素含量[`角色_GRAPHML（）`](information-functions.html#function_roles-graphml)作用

        相应的动态权限是[`角色管理`](privileges-provided.html#priv_role-admin).

    -   启用对不允许的客户端连接的控制-[`超级的`](privileges-provided.html#priv_super)账户：

        -   允许使用[`杀死`](kill.html)声明或[**mysqladmin kill**](mysqladmin.html)命令终止属于其他帐户的线程。（帐户总是可以终止自己的线程。）

        -   服务器不执行[`init_connect`](server-system-variables.html#sysvar_init_connect)系统变量内容[`超级的`](privileges-provided.html#priv_super)客户端连接。

        -   服务器接受来自服务器的一个连接[`超级的`](privileges-provided.html#priv_super)客户端，即使[`max_连接`](server-system-variables.html#sysvar_max_connections)达到系统变量。

        -   处于脱机模式的服务器([`离线模式`](server-system-variables.html#sysvar_offline_mode)已启用）不会终止[`超级的`](privileges-provided.html#priv_super)在下一个客户端请求时进行客户端连接，并从[`超级的`](privileges-provided.html#priv_super)客户。

        -   即使在[`只读`](server-system-variables.html#sysvar_read_only)系统变量已启用。这适用于显式表更新，以及帐户管理语句的使用，例如[`授予`](grant.html)和[`撤销`](revoke.html)隐式更新表。

            前面的连接控制操作对应的动态权限为[`连接管理`](privileges-provided.html#priv_connection-admin).

        你可能还需要[`超级的`](privileges-provided.html#priv_super)如中所述，如果启用了二进制日志记录，则具有创建或更改存储函数的权限[第25.7节，“存储程序二进制记录”](stored-programs-logging.html).

-   [](<>) [`触发`](privileges-provided.html#priv_trigger)

    [](<>)[](<>)

    启用触发操作。您必须拥有此权限才能使表创建、删除、执行或显示该表的触发器。

    当触发器被激活时（由具有执行权限的用户激活）[`插入`](insert.html), [`使现代化`](update.html)或[`删去`](delete.html)与触发器关联的表的语句），触发器执行要求定义触发器的用户仍具有[`触发`](privileges-provided.html#priv_trigger)这张桌子的特权。

-   [](<>) [`使现代化`](privileges-provided.html#priv_update)

    [](<>)[](<>)

    允许在数据库的表中更新行。

-   [](<>) [`用法`](privileges-provided.html#priv_usage)

    [](<>)[](<>)

    此特权说明符代表“无特权”它在全球一级与[`授予`](grant.html)指定条款，如`授予期权`没有在权限列表中指定特定的帐户权限。[`表演补助金`](show-grants.html)展示[`用法`](privileges-provided.html#priv_usage)表示帐户在特权级别上没有特权。

#### 动态权限描述

动态权限是在运行时定义的，与服务器内置的静态权限不同。下面的列表描述了MySQL中可用的每个动态权限。

大多数动态权限是在服务器启动时定义的。其他由特定组件或插件定义，如特权描述所示。在这种情况下，除非定义特权的组件或插件已启用，否则特权不可用。

特定的SQL语句可能具有比此处所述更具体的权限要求。如果是这样的话，有关声明的描述将提供详细信息。

-   [](<>) [`应用程序\密码\管理员`](privileges-provided.html#priv_application-password-admin)（在MySQL 8.0.14中添加）

    [](<>)[](<>)

    对于双密码功能，此权限允许使用`保留当前密码`和`丢弃旧密码`条款[`改变用户`](alter-user.html)和[`设置密码`](set-password.html)适用于您自己账户的对账单。由于大多数用户只需要一个密码，因此需要此权限来操作自己的辅助密码。

    如果允许一个帐户操作所有帐户的辅助密码，则应授予该帐户[`创建用户`](privileges-provided.html#priv_create-user)特权而不是[`应用程序\密码\管理员`](privileges-provided.html#priv_application-password-admin).

    有关使用双重密码的更多信息，请参阅[第6.2.15节“密码管理”](password-management.html).

-   [](<>) [`审计_中止_豁免`](privileges-provided.html#priv_audit-abort-exempt)（在MySQL 8.0.28中添加）

    [](<>)[](<>)

    允许被审核日志筛选器中的“中止”项阻止的查询。此特权由`审计日志`插件；看见[第6.4.5节，“MySQL企业审计”](audit-log.html).

    在MySQL 8.0.28或更高版本中使用[`系统用户`](privileges-provided.html#priv_system-user)拥有特权[`审计_中止_豁免`](privileges-provided.html#priv_audit-abort-exempt)权限在创建时自动分配。这个[`审计_中止_豁免`](privileges-provided.html#priv_audit-abort-exempt)权限也分配给具有的现有帐户[`系统用户`](privileges-provided.html#priv_system-user)特权当您使用MySQL 8.0.28或更高版本执行升级过程时，如果没有现有帐户分配该特权。与[`系统用户`](privileges-provided.html#priv_system-user)因此，权限可用于在审核错误配置后重新获得对系统的访问权限。

-   [](<>) [`审计及行政`](privileges-provided.html#priv_audit-admin)

    [](<>)[](<>)

    启用审核日志配置。此特权由`审计日志`插件；看见[第6.4.5节，“MySQL企业审计”](audit-log.html).

-   [](<>) [`备份管理`](privileges-provided.html#priv_backup-admin)

    [](<>)[](<>)

    允许执行[`锁定备份实例`](lock-instance-for-backup.html)语句和对性能模式的访问[`日志状态`](performance-schema-log-status-table.html)桌子

    笔记

    此外[`备份管理`](privileges-provided.html#priv_backup-admin)这个[`选择`](privileges-provided.html#priv_select)特权[`日志状态`](performance-schema-log-status-table.html)表也是其访问所必需的。

    这个[`备份管理`](privileges-provided.html#priv_backup-admin)权限将自动授予具有[`重新加载`](privileges-provided.html#priv_reload)从早期版本执行MySQL 8.0就地升级时的权限。

-   [](<>) [`身份验证\u策略\u管理`](privileges-provided.html#priv_authentication-policy-admin)（在MySQL 8.0.27中添加）

    [](<>)[](<>)

    这个[`身份验证策略`](server-system-variables.html#sysvar_authentication_policy)系统变量对与身份验证相关的子句[`创建用户`](create-user.html)和[`改变用户`](alter-user.html)可以使用语句。拥有[`身份验证\u策略\u管理`](privileges-provided.html#priv_authentication-policy-admin)特权不受这些限制。（对于不允许的声明，会出现警告。）

    有关[`身份验证策略`](server-system-variables.html#sysvar_authentication_policy)，请参见该变量的说明。

-   [](<>) [`BINLOG_管理员`](privileges-provided.html#priv_binlog-admin)

    [](<>)[](<>)

    通过以下方式启用二进制日志控制：[`清除二进制日志`](purge-binary-logs.html)和[`宾洛格`](binlog.html)声明。

-   [](<>) [`BINLOG_加密_管理`](privileges-provided.html#priv_binlog-encryption-admin)

    [](<>)[](<>)

    启用设置系统变量[`binlog_加密`](replication-options-binary-log.html#sysvar_binlog_encryption)，激活或禁用二进制日志文件和中继日志文件的加密。这种能力不是由[`BINLOG_管理员`](privileges-provided.html#priv_binlog-admin), [`系统变量管理`](privileges-provided.html#priv_system-variables-admin)或[`会话变量管理`](privileges-provided.html#priv_session-variables-admin)特权。相关系统变量[`binlog\u旋转\u加密\u主密钥\u启动时`](replication-options-binary-log.html#sysvar_binlog_rotate_encryption_master_key_at_startup)，在服务器重新启动时自动旋转二进制日志主密钥，不需要此权限。

-   [](<>) [`克隆管理员`](privileges-provided.html#priv_clone-admin)

    [](<>)[](<>)

    允许执行`克隆`声明。包括[`备份管理`](privileges-provided.html#priv_backup-admin)和[`关闭`](privileges-provided.html#priv_shutdown)特权。

-   [](<>) [`连接管理`](privileges-provided.html#priv_connection-admin)

    [](<>)[](<>)

    允许使用[`杀死`](kill.html)声明或[**mysqladmin kill**](mysqladmin.html)命令终止属于其他帐户的线程。（帐户总是可以终止自己的线程。）

    允许设置与客户端连接相关的系统变量，或绕过与客户端连接相关的限制。[`连接管理`](privileges-provided.html#priv_connection-admin)适用于以下系统变量的影响：

    -   [`init_connect`](server-system-variables.html#sysvar_init_connect)：服务器不执行[`init_connect`](server-system-variables.html#sysvar_init_connect)系统变量内容[`连接管理`](privileges-provided.html#priv_connection-admin)客户端连接。

    -   [`max_连接`](server-system-variables.html#sysvar_max_connections)：服务器接受来自服务器的一个连接[`连接管理`](privileges-provided.html#priv_connection-admin)客户端，即使[`max_连接`](server-system-variables.html#sysvar_max_connections)达到系统变量。

    -   [`离线模式`](server-system-variables.html#sysvar_offline_mode)：处于脱机模式的服务器([`离线模式`](server-system-variables.html#sysvar_offline_mode)已启用）不会终止[`连接管理`](privileges-provided.html#priv_connection-admin)在下一个客户端请求时进行客户端连接，并从[`连接管理`](privileges-provided.html#priv_connection-admin)客户。

    -   [`只读`](server-system-variables.html#sysvar_read_only)：即使在[`只读`](server-system-variables.html#sysvar_read_only)系统变量已启用。这适用于显式表更新，以及帐户管理语句的使用，例如[`授予`](grant.html)和[`撤销`](revoke.html)隐式更新表。

-   [](<>) [`加密_密钥_管理员`](privileges-provided.html#priv_encryption-key-admin)

    [](<>)[](<>)

    使能够`InnoDB`加密密钥轮换。

-   [](<>) [`防火墙管理`](privileges-provided.html#priv_firewall-admin)

    [](<>)[](<>)

    允许用户为任何用户管理防火墙规则。此特权由`MYSQL_防火墙`插件；看见[第6.4.7节，“MySQL企业防火墙”](firewall.html).

-   [](<>) [`免防火墙`](privileges-provided.html#priv_firewall-exempt)（在MySQL 8.0.27中添加）

    [](<>)[](<>)

    具有此权限的用户不受防火墙限制。此特权由`MYSQL_防火墙`插件；看见[第6.4.7节，“MySQL企业防火墙”](firewall.html).

-   [](<>) [`防火墙用户`](privileges-provided.html#priv_firewall-user)

    [](<>)[](<>)

    允许用户更新自己的防火墙规则。此特权由`MYSQL_防火墙`插件；看见[第6.4.7节，“MySQL企业防火墙”](firewall.html).

-   [](<>) [`刷新优化器成本`](privileges-provided.html#priv_flush-optimizer-costs)（在MySQL 8.0.23中添加）

    [](<>)[](<>)

    允许使用[`刷新优化器成本`](flush.html#flush-optimizer-costs)陈述

-   [](<>) [`刷新状态`](privileges-provided.html#priv_flush-status)（在MySQL 8.0.23中添加）

    [](<>)[](<>)

    允许使用[`刷新状态`](flush.html#flush-status)陈述

-   [](<>) [`冲水桌`](privileges-provided.html#priv_flush-tables)（在MySQL 8.0.23中添加）

    [](<>)[](<>)

    允许使用[`冲水桌`](flush.html#flush-tables)陈述

-   [](<>) [`刷新用户资源`](privileges-provided.html#priv_flush-user-resources)（在MySQL 8.0.23中添加）

    [](<>)[](<>)

    允许使用[`刷新用户资源`](flush.html#flush-user-resources)陈述

-   [](<>) [`组\复制\管理员`](privileges-provided.html#priv_group-replication-admin)

    [](<>)[](<>)

    使帐户能够使用启动和停止组复制[`启动组复制`](start-group-replication.html)和[`停止组复制`](stop-group-replication.html)语句，以更改[`组\复制\一致性`](group-replication-options.html#sysvar_group_replication_consistency)系统变量，并使用[`组\复制\集合\写入\并发（）`](group-replication-functions-for-maximum-consensus.html#function_group-replication-set-write-concurrency)和[`组\复制\设置\通信\协议（）`](group-replication-functions-for-communication-protocol.html#function_group-replication-set-communication-protocol)功能。将此权限授予用于管理作为复制组成员的服务器的帐户。

-   [](<>) [`组\u复制\u流`](privileges-provided.html#priv_group-replication-stream)

    [](<>)[](<>)

    允许用户帐户用于建立组复制的组通信连接。当MySQL通信堆栈用于组复制时，必须将其授予恢复用户([`组\复制\通信\堆栈=MYSQL`](group-replication-options.html#sysvar_group_replication_communication_stack)).

-   [](<>) [`INNODB_重做_日志_存档`](privileges-provided.html#priv_innodb-redo-log-archive)

    [](<>)[](<>)

    使帐户能够激活和停用重做日志存档。

-   [](<>) [`INNODB_重做_日志_启用`](privileges-provided.html#priv_innodb-redo-log-enable)

    [](<>)[](<>)

    允许使用[`ALTER实例{ENABLE | DISABLE}INNODB REDO_LOG`](alter-instance.html)语句来启用或禁用重做日志记录。在MySQL 8.0.21中引入。

    看见[禁用重做日志记录](innodb-redo-log.html#innodb-disable-redo-logging).

-   [](<>) [`NDB_存储用户`](privileges-provided.html#priv_ndb-stored-user)

    [](<>)[](<>)

    允许用户或角色及其权限在所有用户或角色之间共享和同步`NDB`-一旦MySQL服务器加入给定的NDB集群，就立即启用它们。只有当[`NDB`](mysql-cluster.html)存储引擎已启用。

    对给定用户或角色所做的任何权限更改或撤销都会立即与所有连接的MySQL服务器（SQL节点）同步。您应该知道，不能保证在所有SQL节点上以相同的顺序执行多个影响来自不同SQL节点的权限的语句。因此，强烈建议从单个指定的SQL节点执行所有用户管理。

    `NDB_存储用户`是全局权限，必须使用`在**`。尝试为此权限设置任何其他作用域会导致错误。此权限可以授予大多数应用程序和管理用户，但不能授予系统保留帐户，如`mysql。session@localhost`或`mysql。infoschema@localhost`.

    已被授予`NDB_存储用户`特权存储在`NDB`（因此由所有SQL节点共享），以及具有此权限的角色。仅被授予具有以下权限的角色的用户：`NDB_存储用户`是*不*储存在`NDB`; 每个`NDB`必须明确授予存储用户权限。

    有关如何在中工作的更多详细信息[`NDB`](mysql-cluster.html)看见[第23.6.12节，“特权同步和NDB\_存储\_用户“](mysql-cluster-privilege-synchronization.html).

    这个`NDB_存储用户`从NDB 8.0.18开始提供特权。

-   [](<>) [`无密码用户管理员`](privileges-provided.html#priv_passwordless-user-admin)（在MySQL 8.0.27中添加）

    [](<>)[](<>)

    此权限适用于无密码用户帐户：

    -   对于帐户创建，执行[`创建用户`](create-user.html)要创建无密码帐户，必须拥有[`无密码用户管理员`](privileges-provided.html#priv_passwordless-user-admin)特权

    -   在复制上下文中[`无密码用户管理员`](privileges-provided.html#priv_passwordless-user-admin)特权适用于复制用户，并允许复制[`改变用户。。。修改`](alter-user.html)配置为无密码身份验证的用户帐户的语句。

        有关无密码身份验证的信息，请参阅[FIDO无密码认证](fido-pluggable-authentication.html#fido-pluggable-authentication-passwordless).

-   [](<>) [`持久化变量管理`](privileges-provided.html#priv_persist-ro-variables-admin)

    [](<>)[](<>)

    对于同样拥有[`系统变量管理`](privileges-provided.html#priv_system-variables-admin), [`持久化变量管理`](privileges-provided.html#priv_persist-ro-variables-admin)允许使用[`仅设置为0`](set-variable.html)将全局系统变量持久化到`mysqld自动。cnf`数据目录中的选项文件。这种说法类似于[`设定持续时间`](set-variable.html)但不修改运行时全局系统变量值。这使得[`仅设置为0`](set-variable.html)适用于配置只能在服务器启动时设置的只读系统变量。

    另见[第5.1.9.1节，“系统变量权限”](system-variable-privileges.html).

-   [](<>) [`复制应用程序`](privileges-provided.html#priv_replication-applier)

    [](<>)[](<>)

    使帐户能够充当`权限检查用户`用于复制通道，并执行`宾洛格`声明[**mysqlbinlog**](mysqlbinlog.html)输出将此权限授予使用[`将复制源更改为`](change-replication-source-to.html)（来自MySQL 8.0.23）或[`将主机更改为`](change-master-to.html)（MySQL 8.0.23之前）为复制通道提供安全上下文，并处理这些通道上的复制错误。以及`复制应用程序`特权，您还必须为该帐户提供执行复制通道接收的或包含在复制通道中的事务所需的特权[**mysqlbinlog**](mysqlbinlog.html)输出，例如更新受影响的表。有关更多信息，请参阅[第17.3.3节，“复制权限检查”](replication-privilege-checks.html).

-   [](<>) [`复制_从_管理`](privileges-provided.html#priv_replication-slave-admin)

    [](<>)[](<>)

    使帐户能够连接到复制源服务器，使用启动和停止复制[`开始复制`](start-replica.html)和[`停止复制`](stop-replica.html)语句，并使用[`将复制源更改为`](change-replication-source-to.html)语句（来自MySQL 8.0.23）或[`将主机更改为`](change-master-to.html)语句（MySQL 8.0.23之前）和[`更改复制筛选器`](change-replication-filter.html)陈述。将此权限授予副本用于连接到当前服务器作为其复制源服务器的帐户。此特权不适用于组复制；采用`GROUP_REPLICATION_ADMIN`为了那个原因。

-   [](<>) [`RESOURCE_GROUP_ADMIN`](privileges-provided.html#priv_resource-group-admin)

    [](<>)[](<>)

    启用资源组管理，包括创建、更改和删除资源组，以及将线程和语句分配给资源组。具有此权限的用户可以执行与资源组相关的任何操作。

-   [](<>) [`RESOURCE_GROUP_USER`](privileges-provided.html#priv_resource-group-user)

    [](<>)[](<>)

    允许将线程和语句分配给资源组。拥有此权限的用户可以使用[`设置资源组`](set-resource-group.html)声明和[`RESOURCE_GROUP`](optimizer-hints.html#optimizer-hints-resource-group)优化器提示。

-   [](<>) [`ROLE_ADMIN`](privileges-provided.html#priv_role-admin)

    [](<>)[](<>)

    允许授予和撤销角色，使用`带管理员选项`的条款[`授予`](grant.html)声明和非空`<图形>`结果中的元素内容来自[`ROLES_GRAPHML()`](information-functions.html#function_roles-graphml)功能。需要设置的值[`强制角色`](server-system-variables.html#sysvar_mandatory_roles)系统变量。

-   [](<>) [`SERVICE_CONNECTION_ADMIN`](privileges-provided.html#priv_service-connection-admin)

    [](<>)[](<>)

    启用与仅允许管理连接的网络接口的连接（请参阅[第 5.1.12.1 节，“连接接口”](connection-interfaces.html)）。

-   [](<>) [`SESSION_VARIABLES_ADMIN`](privileges-provided.html#priv_session-variables-admin)（在 MySQL 8.0.14 中添加）

    [](<>)[](<>)

    对于大多数系统变量，设置会话值不需要特殊权限，并且可以由任何用户完成以影响当前会话。对于某些系统变量，设置会话值可能会在当前会话之外产生影响，因此是受限制的操作。对于这些，[`SESSION_VARIABLES_ADMIN`](privileges-provided.html#priv_session-variables-admin)权限使用户能够设置会话值。

    如果系统变量受到限制并且需要特殊权限来设置会话值，则变量描述会指示该限制。例子包括[`binlog_format`](replication-options-binary-log.html#sysvar_binlog_format),[`sql_log_bin`](replication-options-binary-log.html#sysvar_sql_log_bin)， 和[`sql_log_off`](server-system-variables.html#sysvar_sql_log_off).

    MySQL 8.0.14 之前的时候[`SESSION_VARIABLES_ADMIN`](privileges-provided.html#priv_session-variables-admin)已添加，受限会话系统变量只能由拥有[`SYSTEM_VARIABLES_ADMIN`](privileges-provided.html#priv_system-variables-admin)要么[`极好的`](privileges-provided.html#priv_super)特权。

    这[`SESSION_VARIABLES_ADMIN`](privileges-provided.html#priv_session-variables-admin)特权是[`SYSTEM_VARIABLES_ADMIN`](privileges-provided.html#priv_system-variables-admin)和[`极好的`](privileges-provided.html#priv_super)特权。拥有上述任一权限的用户也可以设置受限会话变量并有效地拥有[`SESSION_VARIABLES_ADMIN`](privileges-provided.html#priv_session-variables-admin)暗示且无需授予[`SESSION_VARIABLES_ADMIN`](privileges-provided.html#priv_session-variables-admin)明确地。

    也可以看看[第 5.1.9.1 节，“系统变量权限”](system-variable-privileges.html).

-   [](<>) [`SET_USER_ID`](privileges-provided.html#priv_set-user-id)

    [](<>)[](<>)

    允许在执行视图或存储程序时设置有效的授权 ID。具有此权限的用户可以指定任何帐户作为`定义者`视图或存储程序的属性。存储的程序以指定帐户的权限执行，因此请确保遵循中列出的风险最小化准则[第 25.6 节，“存储对象访问控制”](stored-objects-security.html).

    从 MySQL 8.0.22 开始，[`SET_USER_ID`](privileges-provided.html#priv_set-user-id)还启用了覆盖安全检查，旨在防止（可能无意中）导致存储对象成为孤立对象或导致采用当前孤立的存储对象的操作。有关详细信息，请参阅[孤立存储对象](stored-objects-security.html#stored-objects-security-orphan-objects).

-   [](<>) [`SHOW_ROUTINE`](privileges-provided.html#priv_show-routine)（在 MySQL 8.0.20 中添加）

    [](<>)[](<>)

    使用户能够访问所有存储例程（存储过程和函数）的定义和属性，即使是那些没有将用户命名为例程的`定义者`.这种访问包括：

    -   的内容[`INFORMATION_SCHEMA.ROUTINES`](information-schema-routines-table.html)桌子。

    -   这[`显示创建函数`](show-create-function.html)和[`显示创建过程`](show-create-procedure.html)陈述。

    -   这[`显示功能代码`](show-function-code.html)和[`显示程序代码`](show-procedure-code.html)陈述。

    -   这[`显示功能状态`](show-function-status.html)和[`显示程序状态`](show-procedure-status.html)陈述。

        在 MySQL 8.0.20 之前，为了让用户访问用户未定义的例程定义，用户必须拥有全局[`选择`](privileges-provided.html#priv_select)特权，范围很广。从 8.0.20 开始，[`SHOW_ROUTINE`](privileges-provided.html#priv_show-routine)可以改为授予具有更受限制范围的特权，该特权允许访问例程定义。（即管理员可以撤销全局[`选择`](privileges-provided.html#priv_select)来自不需要的用户并授予[`SHOW_ROUTINE`](privileges-provided.html#priv_show-routine)而是。）这使帐户能够备份存储的例程而无需广泛的权限。

-   [](<>) [`SYSTEM_USER`](privileges-provided.html#priv_system-user)（在 MySQL 8.0.16 中添加）

    [](<>)[](<>)

    这[`SYSTEM_USER`](privileges-provided.html#priv_system-user)权限将系统用户与普通用户区分开来：

    -   一个用户[`SYSTEM_USER`](privileges-provided.html#priv_system-user)权限是系统用户。

    -   没有的用户[`SYSTEM_USER`](privileges-provided.html#priv_system-user)特权是普通用户。

        这[`SYSTEM_USER`](privileges-provided.html#priv_system-user)权限会影响给定用户可以应用其其他权限的帐户，以及该用户是否受到其他帐户的保护：

    -   系统用户可以修改系统帐户和普通帐户。也就是说，拥有适当权限以对常规帐户执行给定操作的用户可以通过拥有[`SYSTEM_USER`](privileges-provided.html#priv_system-user)还可以对系统帐户执行操作。系统帐户只能由具有适当权限的系统用户修改，普通用户不能修改。

    -   具有适当权限的普通用户可以修改普通帐户，但不能修改系统帐户。具有适当权限的系统用户和普通用户都可以修改普通帐户。

        有关详细信息，请参阅[第 6.2.11 节，“帐户类别”](account-categories.html).

        由系统帐户提供的防止被常规帐户修改的保护[`SYSTEM_USER`](privileges-provided.html#priv_system-user)特权不适用于对`mysql`系统模式，因此可以直接修改该模式中的授权表。为了充分保护，不要授予`mysql`普通帐户的架构权限。看[保护系统帐户免受常规帐户的操纵](account-categories.html#protecting-system-accounts).

        如果`审计日志`插件正在使用中（请参阅[第 6.4.5 节，“MySQL 企业审计”](audit-log.html))，从 MySQL 8.0.28，帐户与[`SYSTEM_USER`](privileges-provided.html#priv_system-user)权限被自动分配[`AUDIT_ABORT_EXEMPT`](privileges-provided.html#priv_audit-abort-exempt)特权，即使在过滤器中配置的“中止”项会阻止它们，也允许执行它们的查询。帐户与[`SYSTEM_USER`](privileges-provided.html#priv_system-user)因此，特权可用于在审核错误配置后重新获得对系统的访问权限。

-   [](<>) [`SYSTEM_VARIABLES_ADMIN`](privileges-provided.html#priv_system-variables-admin)

    [](<>)[](<>)

    影响以下操作和服务器行为：

    -   在运行时启用系统变量更改：

        -   启用对全局系统变量的服务器配置更改[`设置全球`](set-variable.html)和[`设置坚持`](set-variable.html).

        -   启用对全局系统变量的服务器配置更改[`SET PERSIST_ONLY`](set-variable.html), 如果用户也有[`PERSIST_RO_VARIABLES_ADMIN`](privileges-provided.html#priv_persist-ro-variables-admin).

        -   启用设置需要特殊权限的受限会话系统变量。有效，[`SYSTEM_VARIABLES_ADMIN`](privileges-provided.html#priv_system-variables-admin)暗示[`SESSION_VARIABLES_ADMIN`](privileges-provided.html#priv_session-variables-admin)没有明确授予[`SESSION_VARIABLES_ADMIN`](privileges-provided.html#priv_session-variables-admin).

            也可以看看[第 5.1.9.1 节，“系统变量权限”](system-variable-privileges.html).

    -   启用对全局事务特征的更改（请参阅[第 13.3.7 节，“SET TRANSACTION 语句”](set-transaction.html)）。

-   [](<>) [`TABLE_ENCRYPTION_ADMIN`](privileges-provided.html#priv_table-encryption-admin)（在 MySQL 8.0.16 中添加）

    [](<>)[](<>)

    允许用户在以下情况下覆盖默认加密设置[`table_encryption_privilege_check`](server-system-variables.html#sysvar_table_encryption_privilege_check)已启用；看[为模式和通用表空间定义加密默认值](innodb-data-encryption.html#innodb-schema-tablespace-encryption-default).

-   [](<>) [`VERSION_TOKEN_ADMIN`](privileges-provided.html#priv_version-token-admin)

    [](<>)[](<>)

    启用版本令牌功能的执行。此特权由`版本令牌`插入;看[第 5.6.6 节，“版本令牌”](version-tokens.html).

-   [](<>) [`XA_RECOVER_ADMIN`](privileges-provided.html#priv_xa-recover-admin)

    [](<>)[](<>)

    启用执行[`XA 恢复`](xa-statements.html)陈述;看[第 13.3.8.1 节，“XA 事务 SQL 语句”](xa-statements.html).

    在 MySQL 8.0 之前，任何用户都可以执行[`XA 恢复`](xa-statements.html)语句来发现未完成的已准备 XA 事务的 XID 值，这可能导致 XA 事务由启动它的用户以外的用户提交或回滚。在 MySQL 8.0 中，[`XA 恢复`](xa-statements.html)只允许拥有[`XA_RECOVER_ADMIN`](privileges-provided.html#priv_xa-recover-admin)特权，预计仅授予有需要的管理用户。例如，对于 XA 应用程序的管理员来说，如果 XA 应用程序崩溃并且需要找到由应用程序启动的未完成事务以便回滚它们，则可能就是这种情况。此权限要求可防止用户发现除他们自己之外的未完成的已准备 XA 事务的 XID 值。它不会影响 XA 事务的正常提交或回滚，因为启动它的用户知道它的 XID。

#### 特权授予准则

只向帐户授予它需要的那些权限是一个好主意。您在授予[`文件`](privileges-provided.html#priv_file)和管理权限：

-   [`文件`](privileges-provided.html#priv_file)可以被滥用以将 MySQL 服务器可以在服务器主机上读取的任何文件读入数据库表。这包括服务器数据目录中的所有世界可读文件和文件。然后可以使用该表访问[`选择`](select.html)将其内容传输到客户端主机。

-   [`授予选项`](privileges-provided.html#priv_grant-option)使用户能够将他们的权限授予其他用户。两个具有不同权限且具有不同权限的用户[`授予选项`](privileges-provided.html#priv_grant-option)特权能够组合特权。

-   [`改变`](privileges-provided.html#priv_alter)可用于通过重命名表来颠覆特权系统。

-   [`关掉`](privileges-provided.html#priv_shutdown)可以被滥用以通过终止服务器来完全拒绝向其他用户提供服务。

-   [`过程`](privileges-provided.html#priv_process)可用于查看当前执行语句的纯文本，包括设置或更改密码的语句。

-   [`极好的`](privileges-provided.html#priv_super)可用于终止其他会话或更改服务器的运行方式。

-   授予的特权`mysql`系统数据库本身可用于更改密码和其他访问权限信息：

    -   密码是加密存储的，因此恶意用户不能简单地读取它们来知道纯文本密码。但是，具有写入权限的用户`mysql.user`系统表`身份验证字符串`列可以更改帐户的密码，然后使用该帐户连接到 MySQL 服务器。

    -   [`插入`](privileges-provided.html#priv_insert)要么[`更新`](privileges-provided.html#priv_update)授予`mysql`系统数据库使用户能够分别添加权限或修改现有权限。

    -   [`降低`](privileges-provided.html#priv_drop)为了`mysql`系统数据库使用户能够远程特权表，甚至数据库本身。

#### 静态与动态特权

[](<>)[](<>)[](<>)

MySQL 支持静态和动态权限：

-   静态权限内置于服务器中。它们始终可以授予用户帐户，并且不能取消注册。

-   动态权限可以在运行时注册和注销。这会影响它们的可用性：无法授予尚未注册的动态权限。

    例如，[`选择`](privileges-provided.html#priv_select)和[`插入`](privileges-provided.html#priv_insert)特权是静态的且始终可用，而动态特权只有在实现它的组件已启用时才可用。

    本节剩余部分将介绍动态权限在MySQL中的工作方式。讨论中使用了“组件”一词，但同样适用于插件。

笔记

服务器管理员应该知道哪些服务器组件定义了动态权限。对于MySQL发行版，定义动态权限的组件文档描述了这些权限。

第三方组件还可以定义动态权限；管理员应该了解这些权限，不要安装可能会冲突或危及服务器操作的组件。例如，如果一个组件和另一个组件使用相同的名称定义了权限，那么这两个组件就会发生冲突。组件开发人员可以通过基于组件名称选择具有前缀的权限名称来减少这种情况的发生。

服务器在内存中内部维护已注册的动态权限集。注销发生在服务器关闭时。

通常，定义动态权限的组件在安装时，在其初始化序列中注册这些权限。卸载时，组件不会注销其已注册的动态权限。（这是当前的做法，不是一项要求。也就是说，组件可以但不可以在任何时候注销它们注册的权限。）

尝试注册已注册的动态权限时，不会出现警告或错误。考虑下面的语句顺序：

```
INSTALL COMPONENT 'my_component';
UNINSTALL COMPONENT 'my_component';
INSTALL COMPONENT 'my_component';
```

第一个[`安装组件`](install-component.html)语句注册组件定义的任何特权`我的_组件`但是[`卸载组件`](uninstall-component.html)不会注销它们。第二次[`安装组件`](install-component.html)语句，则会发现它注册的组件权限已注册，但不会出现警告或错误。

[](<>)[](<>)[](<>)

动态权限仅适用于全局级别。服务器将有关当前分配给用户帐户的动态权限的信息存储在`mysql。全球大学助学金`系统表：

-   服务器会自动注册中指定的权限`全球大学助学金`在服务器启动期间（除非[`--跳过拨款表`](server-options.html#option_mysqld_skip-grant-tables)选项已给出）。

-   这个[`授予`](grant.html)和[`撤销`](revoke.html)语句修改`全球大学助学金`.

-   中列出的动态权限分配`全球大学助学金`他们坚持不懈。它们不会在服务器关闭时删除。

    示例：下面的语句授予用户`u1`控制复制副本上的复制（包括组复制）以及修改系统变量所需的权限：


```
GRANT REPLICATION_SLAVE_ADMIN, GROUP_REPLICATION_ADMIN, BINLOG_ADMIN
ON *.* TO 'u1'@'localhost';
```

授予的动态权限将显示在`表演补助金`声明和`信息模式` [`用户权限`](information-schema-user-privileges-table.html)桌子

对于[`授予`](grant.html)和[`撤销`](revoke.html)在全局级别，任何未被识别为静态的命名特权都会根据当前已注册的动态特权集进行检查，如果找到，就会被授予。否则，将发生一个错误，指示未知的权限标识符。

对于[`授予`](grant.html)和[`撤销`](revoke.html)意义`所有[特权]`全局级别包括所有静态全局权限，以及所有当前注册的动态权限：

-   `全数答应`在全局级别授予所有静态全局权限和所有当前注册的动态权限。在执行后注册的动态特权`授予`对账单不得追溯至任何账户。

-   `撤销所有`在全局级别撤销所有授予的静态全局权限和所有授予的动态权限。

    这个[`同花顺特权`](flush.html#flush-privileges)声明中写道：`全球大学助学金`用于动态权限分配和注册在其中找到的任何未注册权限的表。

    有关MySQL服务器和MySQL发行版中包含的组件提供的动态权限的描述，请参阅[第6.2.2节，“MySQL提供的特权”](privileges-provided.html).

#### 将帐户从超级权限迁移到动态权限

在MySQL 8.0中，许多以前需要[`超级的`](privileges-provided.html#priv_super)特权还与范围更有限的动态特权相关联。（有关这些特权的说明，请参见[第6.2.2节，“MySQL提供的特权”](privileges-provided.html)）通过授予相关的动态权限，而不是[`超级的`](privileges-provided.html#priv_super)。此更改通过使DBA避免授予[`超级的`](privileges-provided.html#priv_super)并根据允许的操作调整用户权限。[`超级的`](privileges-provided.html#priv_super)现在已经被弃用；预计它将在MySQL的未来版本中被删除。

当移除[`超级的`](privileges-provided.html#priv_super)发生以前需要的操作[`超级的`](privileges-provided.html#priv_super)除非获得批准，否则将失败[`超级的`](privileges-provided.html#priv_super)被迁移到适当的动态权限。使用以下说明来完成该目标，以便客户在[`超级的`](privileges-provided.html#priv_super)删除：

1.  执行此查询以标识已授予的帐户[`超级的`](privileges-provided.html#priv_super):

    ```
    SELECT GRANTEE FROM INFORMATION_SCHEMA.USER_PRIVILEGES
    WHERE PRIVILEGE_TYPE = 'SUPER';
    ```

2.  对于前面查询标识的每个帐户，确定其需要的操作[`超级的`](privileges-provided.html#priv_super)。然后授予与这些操作对应的动态权限，并撤销[`超级的`](privileges-provided.html#priv_super).

    例如，如果`'u1'@'localhost'`要求[`超级的`](privileges-provided.html#priv_super)对于二进制日志清除和系统变量修改，这些语句对帐户进行必要的更改：

    ```
    GRANT BINLOG_ADMIN, SYSTEM_VARIABLES_ADMIN ON *.* TO 'u1'@'localhost';
    REVOKE SUPER ON *.* FROM 'u1'@'localhost';
    ```

    修改所有适用帐户后`信息模式`第一步中的查询应该生成一个空结果集。
