365bet官网哪里找-365手游官网-365app下载365足球网站

MySQL :: MySQL 8.4 参考手册 :: 8.2.2 MySQL 提供的权限

MySQL :: MySQL 8.4 参考手册 :: 8.2.2 MySQL 提供的权限

8.2.2 MySQL 提供的权限

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

管理权限使用户能够管理 MySQL 服务器的操作。这些权限是全局的,因为它们不特定于某个特定的数据库。

数据库权限适用于数据库及其中的所有对象。这些权限可以授予特定数据库,也可以全局授予,以便它们适用于所有数据库。

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

权限还在其是静态(内置于服务器)还是动态(在运行时定义)方面有所不同。权限是静态还是动态会影响其对用户帐户和角色的可用性。有关静态权限和动态权限之间差异的信息,请参见 静态与动态权限。)

有关帐户权限的信息存储在 mysql 系统数据库中的授权表中。有关这些表的结构和内容的描述,请参见 第 8.2.3 节,“授权表”。MySQL 服务器在启动时将授权表的内容读入内存,并在 第 8.2.13 节,“权限更改生效的时间” 中指出的情况下重新加载它们。服务器根据授权表的内存副本进行访问控制决策。

重要

某些 MySQL 版本会对授权表进行更改,以添加新的权限或功能。为了确保能够利用任何新功能,在升级 MySQL 时将授权表更新到当前结构。请参见 第 3 章,升级 MySQL。

以下各节总结了可用的权限,提供了对每个权限的更详细描述,并提供了使用指南。

可用权限的摘要

静态权限描述

动态权限描述

权限授予指南

静态与动态权限

将帐户从 SUPER 迁移到动态权限

可用权限的摘要

下表显示了在 GRANT 和 REVOKE 语句中使用的静态权限名称,以及授权表中与每个权限关联的列名,以及权限适用的上下文。

表 8.2 GRANT 和 REVOKE 允许的静态权限

权限

授权表列

上下文

ALL [PRIVILEGES]

“所有权限”的同义词

服务器管理

ALTER

Alter_priv

ALTER ROUTINE

Alter_routine_priv

存储例程

CREATE

Create_priv

数据库、表或索引

CREATE ROLE

Create_role_priv

服务器管理

CREATE ROUTINE

Create_routine_priv

存储例程

CREATE TABLESPACE

Create_tablespace_priv

服务器管理

CREATE TEMPORARY TABLES

Create_tmp_table_priv

CREATE USER

Create_user_priv

服务器管理

CREATE VIEW

Create_view_priv

视图

DELETE

Delete_priv

DROP

Drop_priv

数据库、表或视图

DROP ROLE

Drop_role_priv

服务器管理

EVENT

Event_priv

数据库

EXECUTE

Execute_priv

存储例程

FILE

File_priv

服务器主机上的文件访问

GRANT OPTION

Grant_priv

数据库、表或存储例程

索引

Index_priv

插入

Insert_priv

表或列

锁定表

Lock_tables_priv

数据库

进程

Process_priv

服务器管理

代理

参见 proxies_priv 表

服务器管理

引用

References_priv

数据库或表

重新加载

Reload_priv

服务器管理

复制客户端

Repl_client_priv

服务器管理

复制从属

Repl_slave_priv

服务器管理

选择

Select_priv

表或列

显示数据库

Show_db_priv

服务器管理

显示视图

Show_view_priv

视图

关机

Shutdown_priv

服务器管理

超级

Super_priv

服务器管理

触发器

Trigger_priv

更新

Update_priv

表或列

使用

是 “无权限” 的同义词

服务器管理

下表显示了 GRANT 和 REVOKE 语句中使用的动态权限名称,以及权限适用的上下文。

表 8.3 GRANT 和 REVOKE 允许的动态权限

权限

上下文

ALLOW_NONEXISTENT_DEFINER

孤立对象保护

APPLICATION_PASSWORD_ADMIN

双重密码管理

AUDIT_ABORT_EXEMPT

允许审核日志过滤器阻止的查询

AUDIT_ADMIN

审核日志管理

AUTHENTICATION_POLICY_ADMIN

身份验证管理

BACKUP_ADMIN

备份管理

BINLOG_ADMIN

备份和复制管理

BINLOG_ENCRYPTION_ADMIN

备份和复制管理

CLONE_ADMIN

克隆管理

CONNECTION_ADMIN

服务器管理

ENCRYPTION_KEY_ADMIN

服务器管理

FIREWALL_ADMIN

防火墙管理

FIREWALL_EXEMPT

防火墙管理

FIREWALL_USER

防火墙管理

FLUSH_OPTIMIZER_COSTS

服务器管理

FLUSH_PRIVILEGES

服务器管理

FLUSH_STATUS

服务器管理

FLUSH_TABLES

服务器管理

FLUSH_USER_RESOURCES

服务器管理

GROUP_REPLICATION_ADMIN

复制管理

GROUP_REPLICATION_STREAM

复制管理

INNODB_REDO_LOG_ARCHIVE

重做日志归档管理

INNODB_REDO_LOG_ENABLE

重做日志管理

MASKING_DICTIONARIES_ADMIN

服务器管理

NDB_STORED_USER

NDB 集群

OPTIMIZE_LOCAL_TABLE

OPTIMIZE LOCAL TABLE 语句

PASSWORDLESS_USER_ADMIN

身份验证管理

PERSIST_RO_VARIABLES_ADMIN

服务器管理

REPLICATION_APPLIER

PRIVILEGE_CHECKS_USER 用于复制通道

REPLICATION_SLAVE_ADMIN

复制管理

RESOURCE_GROUP_ADMIN

资源组管理

RESOURCE_GROUP_USER

资源组管理

ROLE_ADMIN

服务器管理

SENSITIVE_VARIABLES_OBSERVER

服务器管理

SESSION_VARIABLES_ADMIN

服务器管理

SET_ANY_DEFINER

服务器管理

SHOW_ROUTINE

服务器管理

SKIP_QUERY_REWRITE

服务器管理

SYSTEM_USER

服务器管理

SYSTEM_VARIABLES_ADMIN

服务器管理

TABLE_ENCRYPTION_ADMIN

服务器管理

TELEMETRY_LOG_ADMIN

AWS 上 HeatWave 的遥测日志管理

TP_CONNECTION_ADMIN

线程池管理

TRANSACTION_GTID_TAG

复制管理

VERSION_TOKEN_ADMIN

服务器管理

XA_RECOVER_ADMIN

服务器管理

静态权限描述

静态权限是内置到服务器中的,与在运行时定义的动态权限形成对比。以下列表描述了 MySQL 中可用的每个静态权限。

某些 SQL 语句可能具有比此处所示更具体的权限要求。如果是这样,则相应的语句描述将提供详细信息。

ALL,ALL PRIVILEGES

这些权限说明符是 “在给定权限级别可用的所有权限” 的简写(GRANT OPTION 除外)。例如,在全局或表级别授予 ALL 将分别授予所有全局权限或所有表级权限。

ALTER

启用使用 ALTER TABLE 语句更改表的结构。 ALTER TABLE 还需要 CREATE 和 INSERT 权限。重命名表需要在旧表上使用 ALTER 和 DROP,在新表上使用 CREATE 和 INSERT。

ALTER ROUTINE

启用使用更改或删除存储例程(存储过程和函数)的语句。对于属于授予权限的范围并且用户不是例程 DEFINER 中命名的用户的例程,还可以访问除例程定义之外的例程属性。

CREATE

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

CREATE ROLE

启用使用 CREATE ROLE 语句。(CREATE USER 权限还允许使用 CREATE ROLE 语句。)参见 第 8.2.10 节,“使用角色”。

CREATE ROLE 和 DROP ROLE 权限不如 CREATE USER 强大,因为它们只能用于创建和删除帐户。它们不能像 CREATE USER 那样修改帐户属性或重命名帐户。参见 用户和角色的互换性。

CREATE ROUTINE

启用使用创建存储例程(存储过程和函数)的语句。对于属于授予权限的范围并且用户不是例程 DEFINER 中命名的用户的例程,还可以访问除例程定义之外的例程属性。

CREATE TABLESPACE

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

CREATE TEMPORARY TABLES

启用使用 CREATE TEMPORARY TABLE 语句创建临时表。

在会话创建临时表后,服务器不会对该表执行任何进一步的权限检查。创建会话可以在该表上执行任何操作,例如 DROP TABLE、INSERT、UPDATE 或 SELECT。有关更多信息,参见 第 15.1.20.2 节,“CREATE TEMPORARY TABLE 语句”。

CREATE USER

启用使用 ALTER USER、CREATE ROLE、CREATE USER、DROP ROLE、DROP USER、RENAME USER 和 REVOKE ALL PRIVILEGES 语句。

CREATE VIEW

启用使用 CREATE VIEW 语句。

DELETE

启用从数据库中的表中删除行。

DROP

启用使用删除(移除)现有数据库、表和视图的语句。 DROP 权限是使用 ALTER TABLE ... DROP PARTITION 语句在分区表上所必需的。 DROP 权限对于 TRUNCATE TABLE 也是必需的。

DROP ROLE

启用使用 DROP ROLE 语句。(CREATE USER 权限还允许使用 DROP ROLE 语句。)参见 第 8.2.10 节,“使用角色”。

CREATE ROLE 和 DROP ROLE 权限不如 CREATE USER 强大,因为它们只能用于创建和删除帐户。它们不能像 CREATE USER 那样修改帐户属性或重命名帐户。参见 用户和角色的互换性。

EVENT

启用使用创建、更改、删除或显示事件调度器的事件的语句。

EXECUTE

启用使用执行存储例程(存储过程和函数)的语句。对于属于授予权限的范围并且用户不是例程 DEFINER 中命名的用户的例程,还可以访问除例程定义之外的例程属性。

FILE

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

启用使用 LOAD DATA 和 SELECT ... INTO OUTFILE 语句以及 LOAD_FILE() 函数在服务器主机上读取和写入文件。具有 FILE 权限的用户可以读取服务器主机上对所有人可读或对 MySQL 服务器可读的任何文件。(这意味着用户可以读取任何数据库目录中的任何文件,因为服务器可以访问任何这些文件。)

启用在 MySQL 服务器具有写入访问权限的任何目录中创建新文件。这包括包含实现权限表的服务器数据目录。

启用对 CREATE TABLE 语句使用 DATA DIRECTORY 或 INDEX DIRECTORY 表选项。

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

要限制可以读取和写入文件的目录,请将 secure_file_priv 系统变量设置为特定目录。参见 第 7.1.8 节,“服务器系统变量”。

GRANT OPTION

启用您向其他用户授予或撤销您自己拥有的权限。

INDEX

允许使用创建或删除(移除)索引的语句。 INDEX 应用于现有表。如果您对某个表拥有 CREATE 权限,则可以在 CREATE TABLE 语句中包含索引定义。

INSERT

允许将行插入数据库中的表。 INSERT 也是 ANALYZE TABLE、OPTIMIZE TABLE 和 REPAIR TABLE 表维护语句所需的。

LOCK TABLES

允许使用显式 LOCK TABLES 语句来锁定您拥有 SELECT 权限的表。这包括使用写锁,它阻止其他会话读取锁定表。

PROCESS

PROCESS 权限控制对服务器中正在执行的线程的访问(即有关会话正在执行的语句的信息)。可以使用 SHOW PROCESSLIST 语句、mysqladmin processlist 命令、Information Schema PROCESSLIST 表和 Performance Schema processlist 表访问线程信息,如下所示:

拥有 PROCESS 权限的用户可以访问所有线程的信息,即使是属于其他用户的线程。

没有 PROCESS 权限,非匿名用户可以访问他们自己线程的信息,但不能访问其他用户的线程,而匿名用户无法访问线程信息。

注意

Performance Schema threads 表也提供线程信息,但表访问使用不同的权限模型。请参见 第 29.12.22.8 节,“threads 表”。

PROCESS 权限还允许使用 SHOW ENGINE 语句、访问 INFORMATION_SCHEMA InnoDB 表(名称以 INNODB_ 开头的表)以及访问 INFORMATION_SCHEMA FILES 表。

PROXY

允许一个用户模拟或成为另一个用户。请参见 第 8.2.19 节,“代理用户”。

REFERENCES

创建外键约束需要对父表拥有 REFERENCES 权限。

RELOAD

RELOAD 允许以下操作:

使用 FLUSH 语句。

使用 mysqladmin 命令,这些命令等效于 FLUSH 操作:flush-hosts、flush-logs、flush-privileges、flush-status、flush-tables、refresh 和 reload。

reload 命令告诉服务器将授权表重新加载到内存中。 flush-privileges 是 reload 的同义词。 refresh 命令关闭并重新打开日志文件,并刷新所有表。其他 flush-xxx 命令执行类似于 refresh 的功能,但更具体,在某些情况下可能更可取。例如,如果您只想刷新日志文件,则 flush-logs 是比 refresh 更好的选择。

使用 mysqldump 选项执行各种 FLUSH 操作:--flush-logs 和 --source-data.

使用 RESET BINARY LOGS AND GTIDS 和 RESET REPLICA 语句。

REPLICATION CLIENT

允许使用 SHOW BINARY LOG STATUS、SHOW REPLICA STATUS 和 SHOW BINARY LOGS 语句。

REPLICATION SLAVE

允许帐户使用 SHOW REPLICAS、SHOW RELAYLOG EVENTS 和 SHOW BINLOG EVENTS 语句来请求对复制源服务器上的数据库所做的更新。此权限也是使用 mysqlbinlog 选项 --read-from-remote-server (-R) 和 --read-from-remote-source 所需的。将此权限授予副本用来连接到当前服务器作为其复制源服务器的帐户。

SELECT

允许从数据库中的表中选择行。 SELECT 语句仅在实际访问表时才需要 SELECT 权限。一些 SELECT 语句不会访问表,可以在没有对任何数据库的权限的情况下执行。例如,您可以使用 SELECT 作为简单的计算器来计算不引用表的表达式

SELECT 1+1;

SELECT PI()*2;SELECT 权限也适用于读取列值的语句。例如, SELECT 是在 UPDATE 语句中的 col_name=expr 赋值中引用的列的右侧或在 DELETE 或 UPDATE 语句的 WHERE 子句中命名的列所需的。

SELECT 权限适用于与 EXPLAIN 一起使用的表或视图,包括视图定义中的任何基础表。

SHOW DATABASES

允许帐户通过发出 SHOW DATABASE 语句来查看数据库名称。没有此权限的帐户只能查看他们拥有某些权限的数据库,如果服务器是在 --skip-show-database 选项下启动的,则根本无法使用此语句。

注意

因为任何静态全局权限都被视为对所有数据库的权限,所以任何静态全局权限都允许用户使用 SHOW DATABASES 或检查 INFORMATION_SCHEMA 的 SCHEMATA 表来查看所有数据库名称,但已通过部分撤销在数据库级别被限制的数据库除外。

SHOW VIEW

允许使用 SHOW CREATE VIEW 语句。此权限也适用于与 EXPLAIN 一起使用的视图。

SHUTDOWN

允许使用 SHUTDOWN 和 RESTART 语句、mysqladmin shutdown 命令以及 mysql_shutdown() C API 函数。

SUPER

SUPER 是一种功能强大且影响范围广泛的权限,不应轻易授予。如果某个帐户只需要执行 SUPER 操作的一部分,则可以通过授予一个或多个动态权限来实现所需权限集,每个动态权限都授予更有限的功能。请参见 动态权限描述。

注意

SUPER 已被弃用,您应该期待它在未来的 MySQL 版本中被移除。请参见 从 SUPER 迁移帐户到动态权限。

SUPER 会影响以下操作和服务器行为:

允许在运行时更改系统变量

允许使用 SET GLOBAL 和 SET PERSIST 对全局系统变量进行服务器配置更改。

相应的动态权限是 SYSTEM_VARIABLES_ADMIN。

允许设置需要特殊权限的受限会话系统变量。

相应的动态权限是 SESSION_VARIABLES_ADMIN。

另请参阅 第 7.1.9.1 节,“系统变量权限”。

允许更改全局事务特性(参见 第 15.3.7 节,“SET TRANSACTION 语句”)。

相应的动态权限是 SYSTEM_VARIABLES_ADMIN。

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

对于常规复制,相应的动态权限是 REPLICATION_SLAVE_ADMIN,对于组复制,相应的动态权限是 GROUP_REPLICATION_ADMIN。

允许使用 CHANGE REPLICATION SOURCE TO 和 CHANGE REPLICATION FILTER 语句。

相应的动态权限是 REPLICATION_SLAVE_ADMIN。

允许通过 PURGE BINARY LOGS 和 BINLOG 语句来控制二进制日志。

相应的动态权限是 BINLOG_ADMIN。

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

相应的动态权限是 SET_ANY_DEFINER 和 ALLOW_NONEXISTENT_DEFINER。

允许使用 CREATE SERVER、ALTER SERVER 和 DROP SERVER 语句。

允许使用 mysqladmin debug 命令。

允许 InnoDB 加密密钥轮换。

相应的动态权限是 ENCRYPTION_KEY_ADMIN。

允许执行版本令牌函数。

相应的动态权限是 VERSION_TOKEN_ADMIN。

允许授予和撤销角色,使用 GRANT 语句的 WITH ADMIN OPTION 子句,以及在 ROLES_GRAPHML() 函数的结果中使用非空的 元素内容。

相应的动态权限是 ROLE_ADMIN。

允许控制不允许非 SUPER 帐户访问的客户端连接

允许使用 KILL 语句或 mysqladmin kill 命令来杀死属于其他帐户的线程。(帐户始终可以杀死自己的线程。)

当 SUPER 客户端连接时,服务器不会执行 init_connect 系统变量内容。

即使 max_connections 系统变量配置的连接限制已达到,服务器也接受来自 SUPER 客户端的一个连接。

处于脱机模式(启用 offline_mode)的服务器不会在下一个客户端请求时终止 SUPER 客户端连接,并接受来自 SUPER 客户端的新连接。

即使启用了 read_only 系统变量,也可以执行更新。这适用于显式表更新,以及使用帐户管理语句(例如 GRANT 和 REVOKE)来隐式更新表。

上述连接控制操作的相应动态权限是 CONNECTION_ADMIN。

如 第 27.7 节,“存储程序二进制日志记录” 中所述,如果启用了二进制日志记录,您可能还需要 SUPER 权限才能创建或更改存储函数。

TRIGGER

允许触发器操作。您必须对表具有此权限才能为该表创建、删除、执行或显示触发器。

当触发器被激活(由具有执行 INSERT、UPDATE 或 DELETE 语句以访问与触发器关联的表的权限的用户激活)时,触发器执行需要定义触发器的用户仍然对该表具有 TRIGGER 权限。

UPDATE

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

USAGE

此权限说明符代表 “无权限。”” 它在全局级别与 GRANT 一起使用,以指定诸如 WITH GRANT OPTION 之类的子句,而无需在权限列表中命名特定的帐户权限。 SHOW GRANTS 显示 USAGE 以指示帐户在权限级别上没有权限。

动态权限说明

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

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

某些 SQL 语句可能具有比此处所示更具体的权限要求。如果是这样,则相应的语句描述将提供详细信息。

ALLOW_NONEXISTENT_DEFINER

允许覆盖旨在防止可能(无意中)导致存储对象成为孤儿或导致采用当前是孤儿的存储对象的那些操作的安全检查。没有此权限,任何尝试生成孤儿 SQL 过程、函数或视图都会导致错误。使用 CREATE PROCEDURE、CREATE FUNCTION、CREATE TRIGGER、CREATE EVENT 或 CREATE VIEW 生成孤儿对象还需要 SET_ANY_DEFINER 以及 ALLOW_NONEXISTENT_DEFINER,以便允许与当前用户不同的定义者。

有关详细信息,请参阅 孤儿存储对象。

APPLICATION_PASSWORD_ADMIN

对于双密码功能,此权限允许对适用于您自己帐户的 ALTER USER 和 SET PASSWORD 语句使用 RETAIN CURRENT PASSWORD 和 DISCARD OLD PASSWORD 子句。此权限是操作您自己的辅助密码所必需的,因为大多数用户只需要一个密码。

如果要允许帐户操作所有帐户的辅助密码,则应授予该帐户 CREATE USER 权限,而不是 APPLICATION_PASSWORD_ADMIN。

有关使用双密码的更多信息,请参阅 第 8.2.15 节,“密码管理”。

AUDIT_ABORT_EXEMPT

允许审计日志过滤器中的 “abort” 项目阻止的查询。此权限由 audit_log 插件定义;请参阅 第 8.4.5 节,“MySQL 企业审计”。

使用 SYSTEM_USER 权限创建的帐户在创建时会自动分配 AUDIT_ABORT_EXEMPT 权限。在执行升级过程时,如果现有的帐户没有分配该权限,则也会将 AUDIT_ABORT_EXEMPT 权限分配给具有 SYSTEM_USER 权限的现有帐户。因此,具有 SYSTEM_USER 权限的帐户可用于在审计错误配置后恢复对系统的访问。

AUDIT_ADMIN

允许审计日志配置。此权限由 audit_log 插件定义;请参阅 第 8.4.5 节,“MySQL 企业审计”。

BACKUP_ADMIN

允许执行 LOCK INSTANCE FOR BACKUP 语句并访问性能模式 log_status 表。

注意

除了 BACKUP_ADMIN 之外,还需要对 log_status 表具有 SELECT 权限才能访问它。

在将 MySQL 8.4 从早期版本就地升级时,BACKUP_ADMIN 权限会自动授予具有 RELOAD 权限的用户。

AUTHENTICATION_POLICY_ADMIN

系统变量 authentication_policy 对 CREATE USER 和 ALTER USER 语句中与身份验证相关的子句的使用方式施加了某些限制。具有 AUTHENTICATION_POLICY_ADMIN 权限的用户不受这些限制的约束。(对于原本不允许的语句,会发出警告。)

有关 authentication_policy 施加的限制的详细信息,请参见该变量的描述。

BINLOG_ADMIN

允许通过 PURGE BINARY LOGS 和 BINLOG 语句来控制二进制日志。

BINLOG_ENCRYPTION_ADMIN

启用设置系统变量 binlog_encryption,该变量激活或停用二进制日志文件和中继日志文件的加密。此功能不受 BINLOG_ADMIN、SYSTEM_VARIABLES_ADMIN 或 SESSION_VARIABLES_ADMIN 权限的提供。相关的系统变量 binlog_rotate_encryption_master_key_at_startup(在服务器重启时自动轮换二进制日志主密钥)不需要此权限。

CLONE_ADMIN

启用执行 CLONE 语句。包括 BACKUP_ADMIN 和 SHUTDOWN 权限。

CONNECTION_ADMIN

允许使用 KILL 语句或 mysqladmin kill 命令来杀死属于其他帐户的线程。(帐户始终可以杀死自己的线程。)

启用设置与客户端连接相关的系统变量,或规避与客户端连接相关的限制。需要 CONNECTION_ADMIN 才能激活 MySQL Server 的脱机模式,这可以通过将系统变量 offline_mode 的值更改为 ON 来完成。

具有 CONNECTION_ADMIN 权限的管理员可以绕过这些系统变量的影响

init_connect:当 CONNECTION_ADMIN 客户端连接时,服务器不会执行 init_connect 系统变量内容。

max_connections:即使达到系统变量 max_connections 配置的连接限制,服务器也会接受来自 CONNECTION_ADMIN 客户端的一个连接。

offline_mode:处于脱机模式(已启用 offline_mode)的服务器不会在下一个客户端请求时终止 CONNECTION_ADMIN 客户端连接,并接受来自 CONNECTION_ADMIN 客户端的新连接。

read_only:即使启用系统变量 read_only,也可以执行来自 CONNECTION_ADMIN 客户端的更新。这适用于显式表更新,也适用于隐式更新表的帐户管理语句,如 GRANT 和 REVOKE。

组复制组成员需要 CONNECTION_ADMIN 权限,以便如果涉及的服务器之一处于脱机模式,则不会终止组复制连接。如果使用 MySQL 通信堆栈(group_replication_communication_stack = MYSQL),则没有此权限,处于脱机模式的成员将被驱逐出组。

ENCRYPTION_KEY_ADMIN

允许 InnoDB 加密密钥轮换。

FIREWALL_ADMIN

启用用户管理任何用户的防火墙规则。此权限由 MYSQL_FIREWALL 插件定义;请参见 第 8.4.7 节,“MySQL Enterprise 防火墙”。

FIREWALL_EXEMPT

具有此权限的用户不受防火墙限制的约束。此权限由 MYSQL_FIREWALL 插件定义;请参见 第 8.4.7 节,“MySQL Enterprise 防火墙”。

FIREWALL_USER

启用用户更新自己的防火墙规则。此权限由 MYSQL_FIREWALL 插件定义;请参见 第 8.4.7 节,“MySQL Enterprise 防火墙”。

FLUSH_OPTIMIZER_COSTS

启用使用 FLUSH OPTIMIZER_COSTS 语句。

FLUSH_PRIVILEGES

启用使用 FLUSH PRIVILEGES 语句。

FLUSH_STATUS

启用使用 FLUSH STATUS 语句。

FLUSH_TABLES

启用使用 FLUSH TABLES 语句。

FLUSH_USER_RESOURCES

启用使用 FLUSH USER_RESOURCES 语句。

GROUP_REPLICATION_ADMIN

启用帐户使用 START GROUP REPLICATION 和 STOP GROUP REPLICATION 语句启动和停止组复制,更改系统变量 group_replication_consistency 的全局设置,以及使用 group_replication_set_write_concurrency() 和 group_replication_set_communication_protocol() 函数。将此权限授予用于管理作为复制组成员的服务器的帐户。

GROUP_REPLICATION_STREAM

允许使用用户帐户建立组复制的组通信连接。当使用 MySQL 通信堆栈进行组复制(group_replication_communication_stack=MYSQL)时,必须将其授予恢复用户。

INNODB_REDO_LOG_ARCHIVE

启用帐户激活和停用重做日志存档。

INNODB_REDO_LOG_ENABLE

启用使用 ALTER INSTANCE {ENABLE|DISABLE} INNODB REDO_LOG 语句来启用或停用重做日志记录。

请参见 停用重做日志记录。

MASKING_DICTIONARIES_ADMIN

启用帐户使用 masking_dictionary_term_add() 和 masking_dictionary_term_remove() 组件函数添加和删除字典词条。帐户还需要此动态权限才能使用 masking_dictionary_remove() 函数删除完整的字典,该函数会删除当前在 mysql.masking_dictionaries 表中与指定字典相关联的所有词条。

请参见 第 8.5 节,“MySQL Enterprise 数据屏蔽和去标识”。

NDB_STORED_USER

启用用户或角色及其权限在所有启用了 NDB 的 MySQL 服务器之间共享和同步,只要它们加入了给定的 NDB 集群。此权限仅在启用 NDB 存储引擎时可用。

对给定用户或角色进行的任何更改或权限撤销都会立即与所有连接的 MySQL 服务器(SQL 节点)同步。您应该注意,无法保证来自不同 SQL 节点的多个影响权限的语句在所有 SQL 节点上的执行顺序相同。因此,强烈建议所有用户管理都在单个指定的 SQL 节点上完成。

NDB_STORED_USER 是一种全局权限,必须使用 ON *.* 授予或撤销。尝试为该权限设置任何其他范围都会导致错误。此权限可以授予大多数应用程序和管理用户,但不能授予系统保留帐户,例如 mysql.session@localhost 或 mysql.infoschema@localhost。

已授予 NDB_STORED_USER 权限的用户将存储在 NDB 中(因此由所有 SQL 节点共享),具有此权限的角色也是如此。仅被授予具有 NDB_STORED_USER 权限的角色的用户不会存储在 NDB 中;每个 NDB 存储用户都必须明确授予此权限。

有关在 NDB 中如何工作的更详细的信息,请参见 第 25.6.13 节,“权限同步和 NDB_STORED_USER”。

OPTIMIZE_LOCAL_TABLE

启用使用 OPTIMIZE LOCAL TABLE 和 OPTIMIZE NO_WRITE_TO_BINLOG TABLE 语句。

PASSWORDLESS_USER_ADMIN

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

对于帐户创建,执行 CREATE USER 以创建无密码帐户的用户必须拥有 PASSWORDLESS_USER_ADMIN 权限。

在复制上下文中,PASSWORDLESS_USER_ADMIN 权限适用于复制用户,并允许复制针对无密码身份验证配置的用户帐户的 ALTER USER ... MODIFY 语句。

有关无密码身份验证的信息,请参见 WebAuthn 无密码身份验证。

PERSIST_RO_VARIABLES_ADMIN

对于也拥有 SYSTEM_VARIABLES_ADMIN 权限的用户,PERSIST_RO_VARIABLES_ADMIN 允许使用 SET PERSIST_ONLY 将全局系统变量持久化到数据目录中的 mysqld-auto.cnf 选项文件。此语句类似于 SET PERSIST,但不会修改运行时全局系统变量的值。这使得 SET PERSIST_ONLY 适用于配置只读系统变量,这些变量只能在服务器启动时设置。

另请参阅 第 7.1.9.1 节,“系统变量权限”。

REPLICATION_APPLIER

允许帐户充当复制通道的 PRIVILEGE_CHECKS_USER,并在 mysqlbinlog 输出中执行 BINLOG 语句。将此权限授予使用 CHANGE REPLICATION SOURCE TO 分配的帐户,以便为复制通道提供安全上下文,并处理这些通道上的复制错误。除了 REPLICATION_APPLIER 权限之外,您还必须授予帐户执行复制通道接收或包含在 mysqlbinlog 输出中的事务所需的权限,例如更新受影响的表。有关更多信息,请参见 第 19.3.3 节,“复制权限检查”。

REPLICATION_SLAVE_ADMIN

允许帐户连接到复制源服务器,使用 START REPLICA 和 STOP REPLICA 语句启动和停止复制,并使用 CHANGE REPLICATION SOURCE TO 和 CHANGE REPLICATION FILTER 语句。将此权限授予副本用于连接到当前服务器作为其复制源服务器的帐户。此权限不适用于组复制;为此使用 GROUP_REPLICATION_ADMIN。

RESOURCE_GROUP_ADMIN

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

RESOURCE_GROUP_USER

启用将线程和语句分配给资源组。拥有此权限的用户可以使用 SET RESOURCE GROUP 语句和 RESOURCE_GROUP 优化器提示。

ROLE_ADMIN

允许授予和撤销角色,使用 GRANT 语句的 WITH ADMIN OPTION 子句,以及 ROLES_GRAPHML() 函数结果中的非空 元素内容。需要设置 mandatory_roles 系统变量的值。

SENSITIVE_VARIABLES_OBSERVER

允许持有者查看 Performance Schema 表 global_variables、session_variables、variables_by_thread 和 persisted_variables 中敏感系统变量的值,发出 SELECT 语句以返回其值,并在连接的会话跟踪器中跟踪对它们的更改。没有此权限的用户无法查看或跟踪这些系统变量的值。请参见 持久化敏感系统变量。

SERVICE_CONNECTION_ADMIN

允许连接到只允许管理连接的网络接口(请参见 第 7.1.12.1 节,“连接接口”)。

SESSION_VARIABLES_ADMIN

对于大多数系统变量,设置会话值不需要特殊权限,任何用户都可以执行此操作来影响当前会话。对于某些系统变量,设置会话值可能会影响当前会话之外的内容,因此这是一个受限操作。对于这些,SESSION_VARIABLES_ADMIN 权限允许用户设置会话值。

如果系统变量受到限制,并且需要特殊权限才能设置会话值,则变量描述会指示该限制。例如,binlog_format、sql_log_bin 和 sql_log_off。

SESSION_VARIABLES_ADMIN 权限是 SYSTEM_VARIABLES_ADMIN 和 SUPER 权限的子集。拥有其中一个权限的用户也可以设置受限会话变量,并隐含地拥有 SESSION_VARIABLES_ADMIN,不需要显式授予 SESSION_VARIABLES_ADMIN。

另请参阅 第 7.1.9.1 节,“系统变量权限”。

SET_ANY_DEFINER

允许在执行视图或存储程序时设置有效授权 ID。拥有此权限的用户可以为 CREATE PROCEDURE、CREATE FUNCTION、CREATE TRIGGER、CREATE EVENT、ALTER EVENT、CREATE VIEW 和 ALTER VIEW 指定任何帐户作为 DEFINER 属性。没有此权限,只能指定有效身份验证 ID。

存储程序使用指定帐户的权限执行,因此请确保您遵循 第 27.6 节,“存储对象访问控制” 中列出的风险最小化指南。

SHOW_ROUTINE

允许用户访问所有存储例程(存储过程和函数)的定义和属性,即使是用户未被命名为例程 DEFINER 的那些例程。此访问包括

Information Schema ROUTINES 表的内容。

SHOW CREATE FUNCTION 和 SHOW CREATE PROCEDURE 语句。

SHOW FUNCTION CODE 和 SHOW PROCEDURE CODE 语句。

SHOW FUNCTION STATUS 和 SHOW PROCEDURE STATUS 语句。

SHOW_ROUTINE 可以作为具有更受限制范围的权限授予,该权限允许访问例程定义。(也就是说,管理员可以撤销对不需要全局 SELECT 的用户的全局 SELECT,并改为授予 SHOW_ROUTINE。)这允许帐户备份存储例程,而不需要广泛的权限。

SKIP_QUERY_REWRITE

由拥有此权限的用户发出的查询不会被 Rewriter 插件重写(请参见 第 7.6.4 节,“Rewriter 查询重写插件”)。

此权限应授予发出不应重写的管理或控制语句的用户,以及用于应用来自复制源的语句的 PRIVILEGE_CHECKS_USER 帐户(请参见 第 19.3.3 节,“复制权限检查”)。

SYSTEM_USER

SYSTEM_USER 权限将系统用户与普通用户区分开来

拥有 SYSTEM_USER 权限的用户是系统用户。

没有 SYSTEM_USER 权限的用户是普通用户。

SYSTEM_USER 权限会影响给定用户可以对其其他权限应用的帐户,以及用户是否受到其他帐户的保护

系统用户可以修改系统帐户和普通帐户。也就是说,一个拥有对普通帐户执行给定操作的适当权限的用户,如果拥有 SYSTEM_USER 权限,就可以对系统帐户执行该操作。系统帐户只能由拥有适当权限的系统用户修改,不能由普通用户修改。

具有适当权限的普通用户可以修改普通帐户,但不能修改系统帐户。系统用户和普通用户都可以修改普通帐户,前提是他们具有适当的权限。

这也意味着,拥有 SYSTEM_USER 权限的用户创建的数据库对象,不能被没有该权限的用户修改或删除。这同样适用于定义者拥有该权限的例程。

有关更多信息,请参见 第 8.2.11 节,“帐户类别”。

对于系统帐户,SYSTEM_USER 权限提供的防止普通帐户修改的保护,并不适用于对 mysql 系统架构具有权限的普通帐户,因此这些帐户可以直接修改该架构中的授权表。为了获得完全保护,请勿将 mysql 架构权限授予普通帐户。请参见 保护系统帐户免受普通帐户的操纵。

如果使用 audit_log 插件(请参见 第 8.4.5 节,“MySQL 企业审计”),则拥有 SYSTEM_USER 权限的帐户会自动分配 AUDIT_ABORT_EXEMPT 权限,该权限允许执行其查询,即使过滤器中配置的 “abort” 项目会阻止它们。因此,可以使用拥有 SYSTEM_USER 权限的帐户,在审计配置错误后重新访问系统。

SYSTEM_VARIABLES_ADMIN

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

允许在运行时更改系统变量

允许使用 SET GLOBAL 和 SET PERSIST 对全局系统变量进行服务器配置更改。

如果用户还拥有 PERSIST_RO_VARIABLES_ADMIN,则允许对全局系统变量进行服务器配置更改,使用 SET PERSIST_ONLY。

允许设置需要特殊权限的受限会话系统变量。实际上,SYSTEM_VARIABLES_ADMIN 意味着 SESSION_VARIABLES_ADMIN,无需显式授予 SESSION_VARIABLES_ADMIN。

另请参阅 第 7.1.9.1 节,“系统变量权限”。

允许更改全局事务特性(参见 第 15.3.7 节,“SET TRANSACTION 语句”)。

TABLE_ENCRYPTION_ADMIN

允许用户在启用 table_encryption_privilege_check 时覆盖默认加密设置;请参见 定义架构和通用表空间的加密默认值。

TELEMETRY_LOG_ADMIN

允许配置遥测日志。该权限由 telemetry_log 插件定义,该插件通过 AWS 上的 HeatWave 部署。

TP_CONNECTION_ADMIN

允许使用特权连接连接到服务器。当达到由 thread_pool_max_transactions_limit 定义的限制时,不允许建立新连接,除非由 thread_pool_longrun_trx_limit 覆盖。特权连接会忽略事务限制,并允许连接到服务器以增加事务限制、删除限制或终止正在运行的事务。默认情况下,不会将此权限授予任何用户。要建立特权连接,发起连接的用户必须拥有 TP_CONNECTION_ADMIN 权限。

当达到由 thread_pool_max_transactions_limit 定义的限制时,特权连接可以执行语句并启动事务。特权连接放置在 Admin 线程组中。请参见 特权连接。

TRANSACTION_GTID_TAG

在复制源服务器上,将 gtid_next 系统变量设置为 AUTOMATIC:TAG 或 UUID:TAG:NUMBER 所需。此外,在源服务器上,还至少需要 SYSTEM_VARIABLES_ADMIN、SESSION_VARIABLES_ADMIN 或 REPLICATION_APPLIER 之一,才能将 gtid_next 设置为这些值之一。

为了将 gtid_next 设置为 AUTOMATIC:TAG,REPLICATION_CHECKS_APPLIER 还必须拥有该权限以及 REPLICATION_APPLIER 权限。这在启动复制应用线程时进行检查。

该权限还要求设置 gtid_purged 服务器系统变量。

有关使用标记 GTID 的更多信息,请参见 gtid_next 的描述,以及 第 19.1.4 节,“在线服务器上的更改 GTID 模式”。

VERSION_TOKEN_ADMIN

允许执行版本令牌函数。该权限由 version_tokens 插件定义;请参见 第 7.6.6 节,“版本令牌”。

XA_RECOVER_ADMIN

允许执行 XA RECOVER 语句;请参见 第 15.3.8.1 节,“XA 事务 SQL 语句”。

在 MySQL 8.4 之前,任何用户都可以执行 XA RECOVER 语句,以发现未完成的已准备好的 XA 事务的 XID 值,这可能会导致由启动事务的用户以外的用户提交或回滚 XA 事务。在 MySQL 8.4 中,只有拥有 XA_RECOVER_ADMIN 权限的用户才能执行 XA RECOVER,预期此权限仅授予需要此权限的管理用户。例如,如果 XA 应用程序崩溃,则管理员可能需要此权限,以便找到应用程序启动的未完成事务,以便可以回滚它们。此权限要求可以防止用户发现除他们自己以外的未完成的已准备好的 XA 事务的 XID 值。它不会影响 XA 事务的正常提交或回滚,因为启动事务的用户知道其 XID。

授权指南

最好只授予帐户其需要的权限。在授予 FILE 和管理权限时,应格外小心。

FILE 可以被滥用来将 MySQL 服务器在服务器主机上可以读取的任何文件读入数据库表。这包括所有世界可读文件和服务器数据目录中的文件。然后可以使用 SELECT 访问该表,将其内容传输到客户端主机。

GRANT OPTION 允许用户将其权限授予其他用户。两个拥有不同权限并且拥有 GRANT OPTION 权限的用户,可以合并权限。

ALTER 可以用来通过重命名表来破坏权限系统。

SHUTDOWN 可以被滥用来通过终止服务器来完全拒绝其他用户的服务。

PROCESS 可以用来查看当前正在执行的语句的纯文本,包括设置或更改密码的语句。

SUPER 可以用来终止其他会话或更改服务器的操作方式。

为 mysql 系统数据库本身授予的权限,可以用来更改密码和其他访问权限信息。

密码以加密形式存储,因此恶意用户无法简单地读取它们来了解纯文本密码。但是,拥有对 mysql.user 系统表 authentication_string 列的写入访问权限的用户,可以更改帐户的密码,然后使用该帐户连接到 MySQL 服务器。

为 mysql 系统数据库授予的 INSERT 或 UPDATE 权限,分别允许用户添加权限或修改现有权限。

为 mysql 系统数据库授予的 DROP 权限,允许用户删除权限表,甚至删除数据库本身。

静态权限与动态权限

MySQL 支持静态权限和动态权限。

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

动态权限可以在运行时注册和取消注册。这会影响它们的可用性:未注册的动态权限不能被授予。

例如,SELECT 和 INSERT 权限是静态的,并且始终可用,而动态权限只有在实现它的组件启用后才可用。

本节的其余部分介绍了动态权限在 MySQL 中的工作方式。讨论使用了术语 “组件”,但同样适用于插件。

注意

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

第三方组件也可以定义动态权限;管理员应该了解这些权限,并且不要安装可能导致冲突或损害服务器操作的组件。例如,如果两个组件都定义了具有相同名称的权限,则这两个组件就会发生冲突。组件开发人员可以通过选择以组件名称为前缀的权限名称,来降低发生这种情况的可能性。

服务器在内存中内部维护已注册的动态权限集。在服务器关闭时会取消注册。

通常,定义动态权限的组件会在安装时(在其初始化序列期间)注册它们。卸载时,组件不会取消注册其已注册的动态权限。(这是当前的做法,而不是要求。也就是说,组件可以(但没有)随时取消注册它们注册的权限。)

尝试注册已注册的动态权限不会产生任何警告或错误。请考虑以下语句序列

INSTALL COMPONENT 'my_component';

UNINSTALL COMPONENT 'my_component';

INSTALL COMPONENT 'my_component';第一个 INSTALL COMPONENT 语句注册了组件 my_component 定义的任何权限,但 UNINSTALL COMPONENT 不会注销它们。对于第二个 INSTALL COMPONENT 语句,它注册的组件权限被发现已经注册,但不会发生任何警告或错误。

动态权限仅在全局级别适用。服务器将有关当前动态权限分配给用户帐户的信息存储在 mysql.global_grants 系统表中。

服务器在服务器启动时自动注册 global_grants 中命名的权限(除非给出 --skip-grant-tables 选项)。

GRANT 和 REVOKE 语句修改 global_grants 的内容。

在 global_grants 中列出的动态权限分配是持久的。它们不会在服务器关闭时被移除。

示例:以下语句授予用户 u1 在副本上控制复制(包括组复制)以及修改系统变量所需的权限。

GRANT REPLICATION_SLAVE_ADMIN, GROUP_REPLICATION_ADMIN, BINLOG_ADMIN

ON *.* TO 'u1'@'localhost';已授予的动态权限会出现在 SHOW GRANTS 语句和 INFORMATION_SCHEMA USER_PRIVILEGES 表的输出中。

对于全局级别的 GRANT 和 REVOKE,任何未识别为静态的命名权限都会针对当前已注册的动态权限集进行检查,如果找到则授予。否则,将发生错误以指示未知权限标识符。

对于 GRANT 和 REVOKE,全局级别上的 ALL [PRIVILEGES] 的含义包括所有静态全局权限,以及所有当前已注册的动态权限。

GRANT ALL 在全局级别授予所有静态全局权限和所有当前已注册的动态权限。在执行 GRANT 语句后注册的动态权限不会追溯授予任何帐户。

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

FLUSH PRIVILEGES 语句读取 global_grants 表以获取动态权限分配,并注册在那里找到的任何未注册权限。

有关 MySQL 服务器和 MySQL 发行版中包含的组件提供的动态权限的描述,请参见 第 8.2.2 节,“MySQL 提供的权限”。

将帐户从 SUPER 迁移到动态权限

在 MySQL 8.4 中,以前需要 SUPER 权限的许多操作也与范围更有限的动态权限相关联。(有关这些权限的描述,请参见 第 8.2.2 节,“MySQL 提供的权限”。)可以通过授予关联的动态权限而不是 SUPER 来允许帐户执行每个此类操作。此更改通过使 DBA 能够避免授予 SUPER 并更仔细地将用户权限定制为允许的操作来提高安全性。 SUPER 现在已弃用;预计它将在 MySQL 的未来版本中删除。

当 SUPER 删除时,以前需要 SUPER 的操作将失败,除非授予 SUPER 的帐户迁移到适当的动态权限。使用以下说明来实现该目标,以便在 SUPER 删除之前帐户已准备就绪。

执行此查询以识别授予 SUPER 的帐户。

SELECT GRANTEE FROM INFORMATION_SCHEMA.USER_PRIVILEGES

WHERE PRIVILEGE_TYPE = 'SUPER';对于由前一个查询标识的每个帐户,确定其需要 SUPER 的操作。然后授予与这些操作相对应的动态权限,并撤销 SUPER。

例如,如果 'u1'@'localhost' 需要 SUPER 用于二进制日志清除和系统变量修改,则以下语句会对帐户进行必要的更改。

GRANT BINLOG_ADMIN, SYSTEM_VARIABLES_ADMIN ON *.* TO 'u1'@'localhost';

REVOKE SUPER ON *.* FROM 'u1'@'localhost';在您修改了所有适用的帐户后,第一步中的 INFORMATION_SCHEMA 查询应生成一个空的结果集。

相关推荐
51金包贷放款中多久到账?
365app下载365足球网站

51金包贷放款中多久到账?

📅 07-06 🔥 847
阿里试用期转正啦,更下面经。
365app下载365足球网站

阿里试用期转正啦,更下面经。

📅 09-07 🔥 127
碓投的意思
365app下载365足球网站

碓投的意思

📅 07-29 🔥 650
9种西红柿家常做法
365app下载365足球网站

9种西红柿家常做法

📅 11-02 🔥 530
在js中怎么设置span宽度
365app下载365足球网站

在js中怎么设置span宽度

📅 01-06 🔥 923