MySQL8 中文参考(二十四)(1)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
日志服务 SLS,月写入数据量 50GB 1个月
简介: MySQL8 中文参考(二十四)


原文:docs.oracle.com/javase/tutorial/reallybigindex.html

8.2 访问控制和账户管理

原文:dev.mysql.com/doc/refman/8.0/en/access-control.html

8.2.1 账户用户名和密码

8.2.2 MySQL 提供的权限

8.2.3 授权表

8.2.4 指定账户名称

8.2.5 指定角色名称

8.2.6 访问控制,第一阶段:连接验证

8.2.7 访问控制,第二阶段:请求验证

8.2.8 添加账户、分配权限和删除账户

8.2.9 保留账户

8.2.10 使用角色

8.2.11 账户类别

8.2.12 使用部分撤销限制权限

8.2.13 权限更改何时生效

8.2.14 分配账户密码

8.2.15 密码管理

8.2.16 服务器处理过期密码

8.2.17 可插拔认证

8.2.18 多因素认证

8.2.19 代理用户

8.2.20 账户锁定

8.2.21 设置账户资源限制

8.2.22 解决连接到 MySQL 的问题

8.2.23 基于 SQL 的账户活动审计

MySQL 允许创建账户,允许客户端用户连接到服务器并访问服务器管理的数据。 MySQL 权限系统的主要功能是对来自特定主机连接的用户进行身份验证,并将该用户与数据库上的权限(如SELECTINSERTUPDATEDELETE)关联起来。其他功能包括授予管理操作的权限。

为了控制哪些用户可以连接,每个账户可以分配身份验证凭据,如密码。 MySQL 账户的用户界面包括 SQL 语句,如CREATE USERGRANTREVOKE。参见第 15.7.1 节,“账户管理语句”。

MySQL 权限系统确保所有用户只能执行其被允许的操作。作为用户,当你连接到 MySQL 服务器时,你的身份由你连接的主机你指定的用户名确定。连接后发出请求时,系统根据你的身份和你想要做的事情授予权限。

MySQL 在识别你时考虑你的主机名和用户名,因为没有理由假设给定的用户名属于所有主机上的同一个人。例如,从office.example.com连接的用户joe不一定是从home.example.com连接的用户joe。MySQL 通过使你能够区分在不同主机上具有相同名称的用户来处理这个问题:你可以为从office.example.com连接的joe授予一组连接权限,为从home.example.com连接的joe授予另一组连接权限。要查看特定账户有哪些权限,使用SHOW GRANTS语句。例如:

SHOW GRANTS FOR 'joe'@'office.example.com';
SHOW GRANTS FOR 'joe'@'home.example.com';

在内部,服务器将权限信息存储在mysql系统数据库的授权表中。MySQL 服务器在启动时将这些表的内容读入内存,并基于内存中的授权表副本做出访问控制决策。

当你运行连接到服务器的客户端程序时,MySQL 访问控制涉及两个阶段:

第一阶段: 服务器根据你的身份接受或拒绝连接,并根据你是否能通过提供正确密码验证你的身份。

第二阶段: 假设你可以连接,服务器会检查你发出的每个语句,以确定你是否有足够的权限执行它。例如,如果你尝试从数据库中的表中选择行或删除数据库中的表,服务器会验证你是否具有表的SELECT权限或数据库的DROP权限。

有关每个阶段发生的详细描述,请参见第 8.2.6 节,“访问控制,阶段 1:连接验证”和第 8.2.7 节,“访问控制,阶段 2:请求验证”。有关诊断与权限相关问题的帮助,请参见第 8.2.22 节,“连接到 MySQL 时出现问题的故障排除”。

如果你的权限在连接时被更改(无论是由你自己还是其他人),这些更改不一定会立即生效于你发出的下一条语句。有关服务器何时重新加载授权表的详细信息,请参见第 8.2.13 节,“权限更改何时生效”。

有一些事情你不能通过 MySQL 权限系统做到:

  • 你不能明确指定某个用户应被拒绝访问。也就是说,你不能明确匹配一个用户然后拒绝连接。
  • 你不能指定用户有权限在数据库中创建或删除表,但不能创建或删除数据库本身。
  • 密码对一个账户全局有效。你不能将密码与特定对象(如数据库、表或例程)关联起来。

8.2.1 账户用户名和密码

原文:dev.mysql.com/doc/refman/8.0/en/user-names.html

MySQL 将账户存储在mysql系统数据库的user表中。账户根据用户名称和用户可以连接到服务器的客户端主机或主机来定义。有关user表中账户表示的信息,请参见 第 8.2.3 节,“授权表”。

一个账户可能还有身份验证凭据,比如密码。这些凭据由账户身份验证插件处理。MySQL 支持多种身份验证插件。其中一些使用内置身份验证方法,而其他一些则启用使用外部身份验证方法进行身份验证。参见 第 8.2.17 节,“可插拔身份验证”。

MySQL 和您的操作系统在使用用户名称和密码方面有几个区别:

  • 用户名,用于 MySQL 身份验证目的,与 Windows 或 Unix 中用于登录的用户名无关。在 Unix  上,默认情况下,大多数 MySQL 客户端尝试使用当前 Unix 用户名作为 MySQL  用户名登录,但这仅仅是为了方便。默认设置可以轻松覆盖,因为客户端程序允许使用-u--user选项指定任何用户名。这意味着任何人都可以尝试使用任何用户名连接到服务器,因此除非所有 MySQL 账户都有密码,否则无法以任何方式使数据库安全。任何指定了没有密码的账户的用户名的人都可以成功连接到服务器。
  • MySQL 用户名称最长可达 32 个字符。操作系统用户名称可能具有不同的最大长度。
    警告
    MySQL 用户名称长度限制是硬编码在 MySQL 服务器和客户端中的,试图通过修改mysql数据库中表的定义来规避它不起作用
    除了通过第三章,“升级 MySQL”中描述的过程之外,您绝对不应以任何方式更改mysql数据库中表的结构。试图以任何其他方式重新定义 MySQL 系统表会导致未定义和不受支持的行为。服务器可以忽略由于这些修改而变得畸形的行。
  • 为使用内置身份验证方法的账户验证客户端连接,服务器使用存储在user表中的密码。这些密码与用于登录操作系统的密码不同。您用于登录 Windows 或 Unix 机器的“外部”密码与您用于访问该机器上的 MySQL 服务器的密码之间没有必要的联系。
    如果服务器使用其他插件对客户端进行身份验证,插件实现的身份验证方法可能会或可能不会使用存储在user表中的密码。在这种情况下,可能还会使用外部密码进行 MySQL 服务器的身份验证。
  • 存储在user表中的密码使用特定于插件的算法进行加密。
  • 如果用户名和密码只包含 ASCII 字符,则无论字符集设置如何,都可以连接到服务器。要在用户名或密码包含非 ASCII 字符时启用连接,客户端应用程序应使用MYSQL_SET_CHARSET_NAME选项和适当的字符集名称作为参数调用mysql_options() C API 函数。这会导致使用指定的字符集进行身份验证。否则,除非服务器默认字符集与身份验证默认值中的编码相同,否则身份验证将失败。
    标准的 MySQL 客户端程序支持一个--default-character-set选项,会导致调用mysql_options()如上所述。此外,支持字符集自动检测,如第 12.4 节,“连接字符集和校对规则”所述。对于不基于 C API 的连接器,可能会提供类似于mysql_options()的等效选项供使用。请查阅连接器文档。
    前述注意事项不适用于ucs2utf16utf32,这些字符集不被允许作为客户端字符集。

MySQL 安装过程会使用初始root账户填充授权表,如第 2.9.4 节,“保护初始 MySQL 账户”所述,该节还讨论了如何为其分配密码。之后,通常使用CREATE USERDROP USERGRANTREVOKE等语句设置、修改和删除 MySQL 账户。参见第 8.2.8 节,“添加账户、分配权限和删除账户”,以及第 15.7.1 节,“账户管理语句”。

要使用命令行客户端连接到 MySQL 服务器,根据要使用的账户,指定用户名和密码选项如下所示:

$> mysql --user=finley --password *db_name*

如果您喜欢简短选项,命令如下:

$> mysql -u finley -p *db_name*

如果在命令行上省略了--password-p选项后面的密码值(如上所示),客户端会提示输入密码。或者,密码可以在命令行上指定:

$> mysql --user=finley --password=*password* *db_name*
$> mysql -u finley -p*password* *db_name*

如果使用-p选项,则-p和后面的密码值之间不能有空格

在命令行上指定密码应被视为不安全。请参见第 8.1.2.1  节,“密码安全的最终用户指南”。为了避免在命令行上输入密码,可以使用选项文件或登录路径文件。请参见第 6.2.2.2  节,“使用选项文件”,以及第 6.6.7 节,“mysql_config_editor — MySQL 配置实用程序”。

有关指定用户名、密码和其他连接参数的附加信息,请参见第 6.2.4 节,“使用命令选项连接到 MySQL 服务器”。

8.2.2 MySQL 提供的权限

原文:dev.mysql.com/doc/refman/8.0/en/privileges-provided.html

授予 MySQL 账户的权限确定账户可以执行哪些操作。MySQL 权限在适用的上下文和操作级别上有所不同:

  • 管理权限使用户能够管理 MySQL 服务器的操作。这些权限是全局的,因为它们不针对特定数据库。
  • 数据库权限适用于数据库及其中的所有对象。这些权限可以针对特定数据库授予,也可以全局授予,以便适用于所有数据库。
  • 对于诸如表、索引、视图和存储过程等数据库对象的权限可以针对数据库中的特定对象授予,也可以针对数据库中给定类型的所有对象(例如,数据库中的所有表)或全局授予所有数据库中给定类型的所有对象。

权限还有静态(内置到服务器中)或动态(在运行时定义)的区别。权限是静态还是动态会影响其是否可以授予用户账户和角色。有关静态和动态权限之间的区别,请参阅静态与动态权限。

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

重要

一些 MySQL 版本对授权表进行更改以添加新的权限或功能。为确保您能够利用任何新功能,每次升级 MySQL 时都要将授权表更新到当前结构。请参阅第三章,升级 MySQL

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

  • 可用权限摘要
  • 静态权限描述
  • 动态权限描述
  • 授权指南
  • 静态权限与动态权限
  • 从 SUPER 迁移账户到动态权限
可用权限摘要

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

表 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 Index_priv 表格
INSERT Insert_priv 表格或列
LOCK TABLES Lock_tables_priv 数据库
PROCESS Process_priv 服务器管理
PROXY 查看 proxies_priv 表格 服务器管理
REFERENCES References_priv 数据库或表
RELOAD Reload_priv 服务器管理
REPLICATION CLIENT Repl_client_priv 服务器管理
REPLICATION SLAVE Repl_slave_priv 服务器管理
SELECT Select_priv 表或列
SHOW DATABASES Show_db_priv 服务器管理
SHOW VIEW Show_view_priv 视图
SHUTDOWN Shutdown_priv 服务器管理
SUPER Super_priv 服务器管理
TRIGGER Trigger_priv
UPDATE Update_priv 表或列
USAGE “无权限”的同义词 服务器管理
Privilege Grant Table Column Context

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

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

Privilege Context
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_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 集群
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_USER_ID 服务器管理
SHOW_ROUTINE 服务器管理
SKIP_QUERY_REWRITE 服务器管理
SYSTEM_USER 服务器管理
SYSTEM_VARIABLES_ADMIN 服务器管理
TABLE_ENCRYPTION_ADMIN 服务器管理
TELEMETRY_LOG_ADMIN 用于 AWS 上 MySQL HeatWave 的遥测日志管理
TP_CONNECTION_ADMIN 线程池管理
VERSION_TOKEN_ADMIN 服务器管理
XA_RECOVER_ADMIN 服务器管理
权限 上下文
静态权限描述

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

特定的 SQL 语句可能具有比此处指示的更具体的权限要求。如果是这样,那么相关语句的描述将提供详细信息。

  • ALL, ALL PRIVILEGES
    这些权限标识符是“在给定权限级别下可用的所有权限”的简写(除了 GRANT OPTION)。例如,在全局或表级别授予 ALL 将授予所有全局权限或所有表级权限。
  • ALTER
    允许使用 ALTER TABLE 语句更改表的结构。ALTER TABLE 还需要 CREATEINSERT 权限。重命名表需要在旧表上具有 ALTERDROP 权限,在新表上具有 CREATEINSERT 权限。
  • ALTER ROUTINE
    允许使用更改或删除存储例程(存储过程和函数)的语句。对于授予权限的范围内的例程,以及用户不是例程 DEFINER 的用户的例程,还允许访问除例程定义之外的例程属性。
  • CREATE
    允许使用创建新数据库和表的语句。
  • CREATE ROLE
    允许使用 CREATE ROLE 语句。(CREATE USER 权限也允许使用 CREATE ROLE 语句。)请参阅 Section 8.2.10, “Using Roles”。
    CREATE ROLEDROP ROLE权限不像CREATE USER那样强大,因为它们只能用于创建和删除帐户。它们不能像CREATE USER那样用于修改帐户属性或重命名帐户。请参阅用户和角色的互换性。
  • CREATE ROUTINE
    允许使用创建存储例程(存储过程和函数)的语句。对于授予权限的范围内的例程,以及用户不是被命名为例程DEFINER的用户的例程,还可以访问除例程定义之外的例程属性。
  • CREATE TABLESPACE
    允许使用创建、修改或删除表空间和日志文件组的语句。
  • CREATE TEMPORARY TABLES
    允许使用CREATE TEMPORARY TABLE语句创建临时表。
    会话创建临时表后,服务器不会对表进行进一步的权限检查。创建会话可以对表执行任何操作,例如DROP TABLEINSERTUPDATESELECT。更多信息,请参阅 Section 15.1.20.2, “CREATE TEMPORARY TABLE Statement”。
  • CREATE USER
    允许使用ALTER USERCREATE ROLECREATE USERDROP ROLEDROP USERRENAME USERREVOKE ALL PRIVILEGES语句。
  • CREATE VIEW
    允许使用CREATE VIEW语句。
  • DELETE
    允许从数据库中删除表中的行。
  • DROP
    允许使用删除(移除)现有数据库、表和视图的语句。在分区表上使用ALTER TABLE ... DROP PARTITION语句需要DROP权限。对于TRUNCATE TABLE也需要DROP权限。
  • DROP ROLE
    允许使用DROP ROLE语句。(CREATE USER权限也允许使用DROP ROLE语句。)参见第 8.2.10 节,“使用角色”。
    CREATE ROLEDROP ROLE权限不如CREATE USER强大,因为它们只能用于创建和删除账户。它们不能像CREATE USER那样修改账户属性或重命名账户。参见用户和角色的互换性。
  • EVENT
    允许使用创建、修改、删除或显示事件调度器事件的语句。
  • EXECUTE
    允许使用执行存储例程(存储过程和函数)的语句。对于权限被授予的范围内的例程以及用户不是例程DEFINER的用户,还允许访问例程定义之外的例程属性。
  • FILE影响以下操作和服务器行为:
  • 使用LOAD DATASELECT ... INTO OUTFILE语句以及LOAD_FILE()函数在服务器主机上读写文件。拥有FILE权限的用户可以读取服务器主机上任何世界可读或 MySQL 服务器可读的文件。(这意味着用户可以读取任何数据库目录中的文件,因为服务器可以访问这些文件。)
  • 允许在 MySQL 服务器具有写入权限的任何目录中创建新文件。这包括包含实现权限表的文件的服务器数据目录。
  • 允许使用DATA DIRECTORYINDEX DIRECTORY表选项用于CREATE TABLE语句。
  • 作为安全措施,服务器不会覆盖现有文件。
    要限制可以读取和写入文件的位置,请将secure_file_priv系统变量设置为特定目录。请参阅第 7.1.8 节,“服务器系统变量”。
  • GRANT OPTION
    允许您向其他用户授予或撤销您自己拥有的权限。
  • INDEX
    允许使用创建或删除(移除)索引的语句。INDEX适用于现有表。如果您对表具有CREATE权限,可以在CREATE TABLE语句中包含索引定义。
  • INSERT
    允许向数据库中的表插入行。INSERT也适用于ANALYZE TABLEOPTIMIZE TABLEREPAIR TABLE表维护语句。
  • LOCK TABLES
    允许使用显式的LOCK TABLES语句来锁定具有SELECT权限的表。这包括使用写锁,阻止其他会话读取被锁定的表。
  • PROCESSPROCESS权限控制对服务器内执行的线程信息的访问(即会话执行的语句的信息)。可以通过SHOW PROCESSLIST语句、mysqladmin processlist命令、信息模式PROCESSLIST表和性能模式processlist表访问线程信息,具体如下:
  • 拥有PROCESS权限的用户可以访问所有线程的信息,甚至包括其他用户的线程。
  • 没有PROCESS权限,非匿名用户可以访问自己的线程信息,但不能访问其他用户的线程信息,匿名用户则无法访问线程信息。
  • 注意
    性能模式threads表还提供线程信息,但表访问使用不同的权限模型。请参阅第 29.12.21.8 节,“The threads Table”。
    PROCESS权限还允许使用SHOW ENGINE语句,访问INFORMATION_SCHEMA InnoDB表(名称以INNODB_开头的表),以及(从 MySQL 8.0.21 开始)访问INFORMATION_SCHEMA FILES表。
  • PROXY
    允许一个用户冒充或成为另一个用户。请参阅第 8.2.19 节,“Proxy Users”。
  • REFERENCES
    创建外键约束需要父表的REFERENCES权限。
  • RELOADRELOAD使以下操作生效:
  • 使用FLUSH语句。
  • 使用mysqladmin命令等同于FLUSH操作:flush-hostsflush-logsflush-privilegesflush-statusflush-tablesflush-threadsrefreshreload
    reload命令告诉服务器重新加载授权表到内存中。flush-privilegesreload的同义词。refresh命令关闭并重新打开日志文件并刷新所有表。其他flush-*xxx*命令执行类似于refresh的功能,但更具体,可能在某些情况下更可取。例如,如果要刷新日志文件,flush-logsrefresh更好。
  • 使用mysqldump选项执行各种FLUSH操作:--flush-logs--master-data
  • 使用RESET MASTERRESET REPLICA(或在 MySQL 8.0.22 之前,RESET SLAVE)语句。
  • REPLICATION CLIENT
    允许使用SHOW MASTER STATUSSHOW REPLICA STATUSSHOW BINARY LOGS语句。
  • 复制从服务器
    允许帐户请求在复制源服务器上对数据库进行的更新,使用SHOW REPLICAS(或在 MySQL 8.0.22 之前,SHOW SLAVE HOSTS)、SHOW RELAYLOG EVENTSSHOW BINLOG EVENTS语句。还需要此权限才能使用mysqlbinlog选项--read-from-remote-server-R)、--read-from-remote-source--read-from-remote-master。将此权限授予由副本用于连接到当前服务器作为其复制源服务器的帐户。
  • SELECT
    允许从数据库中选择表中的行。只有当SELECT语句实际访问表时,才需要SELECT权限。一些SELECT语句不访问表,可以在没有任何数据库权限的情况下执行。例如,您可以使用SELECT作为一个简单的计算器来评估不涉及表的表达式:
SELECT 1+1;
SELECT PI()*2;
  • 还需要SELECT权限用于读取列值的其他语句。例如,在UPDATE语句中,需要为在*col_name=expr*赋值右侧引用的列或在DELETEUPDATE语句的WHERE子句中命名的列。
    用于EXPLAIN中使用的表或视图需要SELECT权限,包括视图定义中的任何基础表。
  • 显示数据库
    通过发出SHOW DATABASE语句,使账户能够查看数据库名称。没有此权限的账户只能看到他们拥有某些权限的数据库,并且如果服务器是使用--skip-show-database选项启动的,则根本无法使用该语句。
    注意
    因为任何静态全局权限被视为所有数据库的权限,任何静态全局权限使用户可以使用SHOW DATABASES或通过检查INFORMATION_SCHEMASCHEMATA表来查看所有数据库名称,除了通过部分撤销在数据库级别限制的数据库。
  • SHOW VIEW
    允许使用SHOW CREATE VIEW语句。此权限也适用于与EXPLAIN一起使用的视图。
  • SHUTDOWN
    允许使用SHUTDOWNRESTART语句,mysqladmin shutdown命令,以及mysql_shutdown() C API 函数。
  • SUPERSUPER是一个强大且影响深远的权限,不应轻易授予。如果一个账户只需要执行SUPER操作的子集,可能可以通过代替授予一个或多个动态权限来实现所需的权限集,每个动态权限都提供更有限的功能。请参阅动态权限描述。注意SUPER已被弃用,您应该期望它在将来的 MySQL 版本中被移除。请参阅从 SUPER 迁移到动态权限的账户迁移。SUPER影响以下操作和服务器行为:
  • 允许在运行时更改系统变量:
  • 允许对全局系统变量进行服务器配置更改,使用SET GLOBALSET PERSIST
    相应的动态权限是SYSTEM_VARIABLES_ADMIN
  • 允许设置需要特殊权限的受限会话系统变量。
    对应的动态特权是SESSION_VARIABLES_ADMIN
  • 参见 Section 7.1.9.1,“系统变量特权”。
  • 启用对全局事务特性的更改(参见 Section 15.3.7,“SET TRANSACTION 语句”)。
    对应的动态特权是SYSTEM_VARIABLES_ADMIN
  • 启用帐户启动和停止复制,包括组复制。
    对于常规复制,对应的动态特权是REPLICATION_SLAVE_ADMIN,对于组复制是GROUP_REPLICATION_ADMIN
  • 启用使用CHANGE REPLICATION SOURCE TO语句(从 MySQL 8.0.23 开始)、CHANGE MASTER TO语句(在 MySQL 8.0.23 之前)和CHANGE REPLICATION FILTER语句。
    对应的动态特权是REPLICATION_SLAVE_ADMIN
  • 通过PURGE BINARY LOGSBINLOG语句实现二进制日志控制。
    对应的动态特权是BINLOG_ADMIN
  • 启用在执行视图或存储程序时设置有效授权 ID。拥有此特权的用户可以在视图或存储程序的DEFINER属性中指定任何帐户。
    对应的动态特权是SET_USER_ID
  • 启用使用CREATE SERVERALTER SERVERDROP 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系统变量启用时,可以执行更新操作。这适用于显式表更新,以及使用诸如GRANTREVOKE等更新表的账户管理语句。
  • 前述连接控制操作对应的动态特权是CONNECTION_ADMIN
  • 如果启用了二进制日志记录,您可能还需要SUPER特权来创建或更改存储函数,如 Section 27.7, “Stored Program Binary Logging”中所述。
  • TRIGGER
    启用触发器操作。您必须对表具有此特权才能为该表创建、删除、执行或显示触发器。
    当触发器被激活(由具有执行INSERTUPDATEDELETE语句权限的用户激活,与触发器相关联的表),触发器执行要求定义触发器的用户仍然对表具有TRIGGER特权。
  • UPDATE
    允许更新数据库中表中的行。
  • USAGE
    此特权说明符代表“无特权”。它在全局级别与GRANT一起使用,用于指定诸如WITH GRANT OPTION之类的子句,而不在特权列表中命名特定帐户特权。SHOW GRANTS显示USAGE以指示帐户在特权级别上没有特权。
动态特权描述

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

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

特定的 SQL 语句可能具有比此处指示的更具体的特权要求。如果是这样,相关语句的描述提供详细信息。

  • APPLICATION_PASSWORD_ADMIN(在 MySQL 8.0.14 中添加)
    对于双密码功能,此特权允许使用RETAIN CURRENT PASSWORDDISCARD OLD PASSWORD子句,适用于您自己的帐户的ALTER USERSET PASSWORD语句。大多数用户只需要一个密码,因此需要此特权来操作自己的次要密码。
    如果要允许帐户操作所有帐户的次要密码,则应授予CREATE USER特权,而不是APPLICATION_PASSWORD_ADMIN
    有关双密码使用的更多信息,请参见第 8.2.15 节,“密码管理”。
  • AUDIT_ABORT_EXEMPT(在 MySQL 8.0.28 中添加)
    允许在审计日志过滤器中由“中止”项目阻止的查询。此特权由audit_log插件定义;请参见第 8.4.5 节,“MySQL 企业审计”。
    在 MySQL 8.0.28 或更高版本中创建的带有SYSTEM_USER权限的帐户在创建时会自动分配AUDIT_ABORT_EXEMPT权限。在进行 MySQL 8.0.28 或更高版本的升级过程中,如果没有现有帐户被分配该权限,则具有SYSTEM_USER权限的现有帐户也会被分配AUDIT_ABORT_EXEMPT权限。因此,具有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.0 时,具有RELOAD权限的用户在执行就地升级时会自动被授予BACKUP_ADMIN权限。
  • AUTHENTICATION_POLICY_ADMIN(MySQL 8.0.27 中新增)
    authentication_policy系统变量对CREATE USERALTER USER语句中的身份验证相关子句的使用施加了一定的约束。具有AUTHENTICATION_POLICY_ADMIN权限的用户不受这些约束的限制。(对于否则不允许的语句会发出警告。)
    有关authentication_policy强加的约束的详细信息,请参阅该变量的描述。
  • BINLOG_ADMIN
    通过PURGE BINARY LOGSBINLOG语句启用二进制日志控制。
  • BINLOG_ENCRYPTION_ADMIN
    启用设置系统变量binlog_encryption,该变量激活或停用二进制日志文件和中继日志文件的加密。这种能力不是由BINLOG_ADMINSYSTEM_VARIABLES_ADMINSESSION_VARIABLES_ADMIN 权限提供的。相关的系统变量binlog_rotate_encryption_master_key_at_startup,在服务器重新启动时自动旋转二进制日志主密钥,不需要此权限。
  • CLONE_ADMIN
    启用执行CLONE语句。包括BACKUP_ADMINSHUTDOWN 权限。
  • CONNECTION_ADMIN启用使用KILL语句或mysqladmin kill 命令来终止属于其他账户的线程。 (一个账户始终可以终止自己的线程。)启用设置与客户端连接相关的系统变量,或绕过与客户端连接相关的限制。从 MySQL 8.0.31 开始,需要CONNECTION_ADMIN 权限来激活 MySQL 服务器的离线模式,这是通过将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客户端的更新。这适用于显式表更新,以及更新隐式更新表的账户管理语句,如GRANTREVOKE
  • Group Replication 组成员需要CONNECTION_ADMIN特权,以便在涉及的服务器中的一个处于离线模式时,Group Replication 连接不会被终止。如果使用 MySQL 通信堆栈(group_replication_communication_stack = MYSQL),没有此特权,处于离线模式的成员将被从组中驱逐。
  • ENCRYPTION_KEY_ADMIN
    启用InnoDB加密密钥轮换。
  • FIREWALL_ADMIN
    启用用户管理任何用户的防火墙规则。此特权由MYSQL_FIREWALL插件定义;参见第 8.4.7 节,“MySQL 企业防火墙”。
  • FIREWALL_EXEMPT(MySQL 8.0.27 中添加)
    拥有此特权的用户不受防火墙限制。此特权由MYSQL_FIREWALL插件定义;参见第 8.4.7 节,“MySQL 企业防火墙”。
  • FIREWALL_USER
    启用用户更新其自己的防火墙规则。此特权由MYSQL_FIREWALL插件定义;参见第 8.4.7 节,“MySQL 企业防火墙”。
  • FLUSH_OPTIMIZER_COSTS(MySQL 8.0.23 中添加)
    启用FLUSH OPTIMIZER_COSTS语句的使用。
  • FLUSH_STATUS(MySQL 8.0.23 中添加)
    启用FLUSH STATUS语句的使用。
  • FLUSH_TABLES(MySQL 8.0.23 中添加)
    启用FLUSH TABLES语句的使用。
  • FLUSH_USER_RESOURCES(MySQL 8.0.23 中添加)
    允许使用FLUSH USER_RESOURCES语句。
  • GROUP_REPLICATION_ADMIN
    允许账户启动和停止组复制,使用START GROUP REPLICATIONSTOP 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语句启用或禁用重做日志。MySQL 8.0.21 中引入。
    参见禁用重做日志。
  • MASKING_DICTIONARIES_ADMIN
    允许账户使用masking_dictionary_term_add()masking_dictionary_term_remove()组件函数添加和移除字典术语。账户还需要此动态权限使用masking_dictionary_remove()函数移除完整字典,该函数会移除mysql.masking_dictionaries表中与命名字典相关的所有术语。
    请参阅 第 8.5 节,“MySQL 企业数据脱敏和去标识化”。
  • NDB_STORED_USER
    使用户或角色及其权限能够在所有加入给定 NDB 集群的 NDB 启用的 MySQL 服务器之间共享和同步。此特权仅在启用 NDB 存储引擎时可用。
    对给定用户或角色的权限更改或撤销会立即与所有连接的 MySQL 服务器(SQL 节点)同步。您应该注意,不能保证来自不同 SQL 节点的影响权限的多个语句以相同顺序在所有 SQL 节点上执行。因此,强烈建议所有用户管理都从一个指定的 SQL 节点进行。
    NDB_STORED_USER 是一个全局特权,必须使用 ON *.* 进行授予或撤销。尝试为此特权设置任何其他范围将导致错误。这个特权可以授予大多数应用程序和管理用户,但不能授予系统保留帐户,如 mysql.session@localhostmysql.infoschema@localhost
    被授予 NDB_STORED_USER 特权的用户存储在 NDB 中(因此被所有 SQL 节点共享),具有此特权的角色也是如此。仅仅被授予具有 NDB_STORED_USER 的角色的用户 存储在 NDB 中;每个 NDB 存储的用户必须显式授予该特权。
    有关在 NDB 中如何工作的更详细信息,请参阅 第 25.6.13 节,“特权同步和 NDB_STORED_USER”。
    NDB_STORED_USER 特权从 NDB 8.0.18 开始提供。
  • PASSWORDLESS_USER_ADMIN(在 MySQL 8.0.27 中添加)此特权适用于无密码用户帐户:
  • 对于帐户创建,执行 CREATE USER 创建无密码帐户的用户必须具有 PASSWORDLESS_USER_ADMIN 特权。
  • 在复制环境中,PASSWORDLESS_USER_ADMIN 特权适用于复制用户,并允许为配置为无密码身份验证的用户帐户复制 ALTER USER ... MODIFY 语句。
  • 有关无密码身份验证的信息,请参阅 FIDO 无密码身份验证。
  • 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(从 MySQL 8.0.23 开始)或CHANGE MASTER TO(在 MySQL 8.0.23 之前)分配的账户,以为复制通道提供安全上下文,并处理这些通道上的复制错误。除了REPLICATION_APPLIER权限外,您还必须为账户授予执行复制通道接收的事务或包含在mysqlbinlog输出中的所需权限,例如更新受影响的表。有关更多信息,请参见 第 19.3.3 节,“复制权限检查”。
  • REPLICATION_SLAVE_ADMIN
    允许帐户连接到复制源服务器,使用START REPLICASTOP REPLICA语句启动和停止复制,并使用CHANGE REPLICATION SOURCE TO语句(从 MySQL 8.0.23 开始)或CHANGE MASTER TO语句(在 MySQL 8.0.23 之前)以及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系统变量的值。


MySQL8 中文参考(二十四)(2)https://developer.aliyun.com/article/1566153

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
5月前
|
关系型数据库 MySQL Unix
MySQL8 中文参考(二十三)(3)
MySQL8 中文参考(二十三)
54 4
|
5月前
|
存储 缓存 关系型数据库
MySQL8 中文参考(二十一)(5)
MySQL8 中文参考(二十一)
82 3
|
5月前
|
存储 监控 Java
MySQL8 中文参考(二十一)(4)
MySQL8 中文参考(二十一)
139 3
|
5月前
|
存储 安全 关系型数据库
MySQL8 中文参考(二十一)(1)
MySQL8 中文参考(二十一)
49 3
|
5月前
|
存储 关系型数据库 MySQL
MySQL8 中文参考(二十一)(3)
MySQL8 中文参考(二十一)
72 2
|
5月前
|
关系型数据库 MySQL Unix
MySQL8 中文参考(二十一)(2)
MySQL8 中文参考(二十一)
75 2
|
5月前
|
关系型数据库 MySQL 数据安全/隐私保护
MySQL8 中文参考(二十五)(5)
MySQL8 中文参考(二十五)
47 2
|
5月前
|
NoSQL 关系型数据库 MySQL
MySQL8 中文参考(二十三)(2)
MySQL8 中文参考(二十三)
61 2
|
5月前
|
存储 关系型数据库 MySQL
MySQL8 中文参考(二十三)(1)
MySQL8 中文参考(二十三)
37 2
|
5月前
|
存储 关系型数据库 MySQL
MySQL8 中文参考(二十四)(2)
MySQL8 中文参考(二十四)
84 1