一个系统变量可以有一个影响整个服务器操作的全局值,一个只影响当前会话的会话值,或者两者都有:
对于动态系统变量,该
SET
语句可用于更改它们的全局或会话运行时值(或两者),以影响当前服务器实例的操作。(有关动态变量的信息,请参阅第 5.1.9.2 节,“动态系统变量”。)对于某些全局系统变量,
SET
可用于将其值持久化到mysqld-auto.cnf
数据目录下的文件中,以影响后续启动的服务器运行。(有关持久化系统变量和mysqld-auto.cnf
文件的信息,请参阅 第 5.1.9.3 节,“持久化系统变量”。)对于持久化的全局系统变量,
RESET PERSIST
可用于从 中删除它们的值mysqld-auto.cnf
,以影响后续启动的服务器操作。
本节介绍在运行时为系统变量赋值的操作所需的权限。这包括影响运行时值的操作和持久化值的操作。
要设置全局系统变量,请使用
SET
带有适当关键字的语句。这些特权适用:
要设置全局系统变量运行时值,请使用 需要 特权(或已弃用的 特权) 的
SET GLOBAL
语句 。SYSTEM_VARIABLES_ADMIN
SUPER
要将全局系统变量持久保存到
mysqld-auto.cnf
文件(并设置运行时值),请使用 需要or 权限 的SET PERSIST
语句 。SYSTEM_VARIABLES_ADMIN
SUPER
要将全局系统变量持久保存到
mysqld-auto.cnf
文件(不设置运行时值),请使用 需要和 权限 的SET PERSIST_ONLY
语句 。可用于动态和只读系统变量,但对于持久化只读变量特别有用,因为它 不能使用。SYSTEM_VARIABLES_ADMIN
PERSIST_RO_VARIABLES_ADMIN
SET PERSIST_ONLY
SET PERSIST
一些全局系统变量是持久受限的(请参阅 第 5.1.9.4 节,“不可持久和持久受限的系统变量”)。要保留这些变量,请使用
SET PERSIST_ONLY
语句,这需要前面描述的权限。此外,您必须使用加密连接连接到服务器并提供 SSL 证书,其主题值由persist_only_admin_x509_subject
系统变量指定。
要从
mysqld-auto.cnf
文件中删除持久化的全局系统变量,请使用该
RESET PERSIST
语句。这些特权适用:
对于动态系统变量,
RESET PERSIST
需要SYSTEM_VARIABLES_ADMIN
或SUPER
权限。对于只读系统变量,
RESET PERSIST
需要SYSTEM_VARIABLES_ADMIN
和PERSIST_RO_VARIABLES_ADMIN
权限。对于持久性受限变量,
RESET PERSIST
不需要使用特定 SSL 证书与服务器建立加密连接。
如果全局系统变量对上述权限要求有任何例外,则变量描述会指示这些例外。示例包括
default_table_encryption
和
mandatory_roles
,它们需要额外的权限。这些附加权限适用于设置全局运行时值的操作,但不适用于保留该值的操作。
要设置会话系统变量运行时值,请使用
SET
SESSION
语句。与设置全局运行时值相比,设置会话运行时值通常不需要特殊权限,任何用户都可以影响当前会话。对于某些系统变量,设置会话值可能会在当前会话之外产生影响,因此是一个受限操作,只能由具有特殊权限的用户完成:
从 MySQL 8.0.14 开始,所需的权限为
SESSION_VARIABLES_ADMIN
.笔记任何具有
SYSTEM_VARIABLES_ADMIN
或SUPER
实际上具有SESSION_VARIABLES_ADMIN
暗示且不需要SESSION_VARIABLES_ADMIN
明确授予的用户。在 MySQL 8.0.14 之前,所需的权限是
SYSTEM_VARIABLES_ADMIN
或SUPER
。
如果会话系统变量受到限制,则变量描述会指示该限制。示例包括
binlog_format
和
sql_log_bin
。设置这些变量的会话值会影响当前会话的二进制日志记录,但也可能对服务器复制和备份的完整性产生更广泛的影响。
SESSION_VARIABLES_ADMIN
使管理员能够最大限度地减少以前可能已被授予
SYSTEM_VARIABLES_ADMIN
或
SUPER
允许他们修改受限会话系统变量的用户的权限足迹。假设管理员创建了以下角色以授予设置受限会话系统变量的能力:
CREATE ROLE set_session_sysvars;
GRANT SYSTEM_VARIABLES_ADMIN ON *.* TO set_session_sysvars;
任何授予该set_session_sysvars
角色的用户(以及激活该角色的用户)都可以设置受限会话系统变量。但是,该用户还能够设置全局系统变量,这可能是不受欢迎的。
通过将角色修改为 have
SESSION_VARIABLES_ADMIN
而不是SYSTEM_VARIABLES_ADMIN
,角色特权可以减少为设置受限会话系统变量的能力,仅此而已。要修改角色,请使用以下语句:
GRANT SESSION_VARIABLES_ADMIN ON *.* TO set_session_sysvars;
REVOKE SYSTEM_VARIABLES_ADMIN ON *.* FROM set_session_sysvars;
修改角色有立竿见影的效果:任何被授予该set_session_sysvars
角色的帐户都不再具有
SYSTEM_VARIABLES_ADMIN
并且不能设置全局系统变量,除非被明确授予该能力。类似的
GRANT
/REVOKE
序列可以应用于
SYSTEM_VARIABLES_ADMIN
直接授予而不是通过角色授予的任何帐户。