系统变量可以具有影响整个服务器操作的全局值、仅影响当前会话的会话值,或同时具有这两种值。
对于动态系统变量,可以使用
SET
语句更改其全局或会话运行时值(或两者),以影响当前服务器实例的操作。(有关动态变量的信息,请参阅 第 7.1.9.2 节,“动态系统变量”。)对于某些全局系统变量,可以使用
SET
将其值持久化到数据目录中的mysqld-auto.cnf
文件,以影响后续启动时的服务器操作。(有关持久化系统变量和mysqld-auto.cnf
文件的信息,请参阅 第 7.1.9.3 节,“持久化系统变量”。)对于持久化的全局系统变量,可以使用
RESET PERSIST
从mysqld-auto.cnf
中删除其值,以影响后续启动时的服务器操作。
本节介绍在运行时为系统变量赋值所需的操作权限。这包括影响运行时值的操作和持久化值的操作。
要设置全局系统变量,请使用带有适当关键字的 SET
语句。以下权限适用:
要设置全局系统变量运行时值,请使用
SET GLOBAL
语句,这需要SYSTEM_VARIABLES_ADMIN
权限(或已弃用的SUPER
权限)。要将全局系统变量持久化到
mysqld-auto.cnf
文件(并设置运行时值),请使用SET PERSIST
语句,这需要SYSTEM_VARIABLES_ADMIN
或SUPER
权限。要将全局系统变量持久化到
mysqld-auto.cnf
文件(而不设置运行时值),请使用SET PERSIST_ONLY
语句,这需要SYSTEM_VARIABLES_ADMIN
和PERSIST_RO_VARIABLES_ADMIN
权限。SET PERSIST_ONLY
可用于动态和只读系统变量,但对于持久化只读变量特别有用,因为SET PERSIST
不能用于只读变量。某些全局系统变量是持久化受限的(请参阅 第 7.1.9.4 节,“非持久化和持久化受限系统变量”)。要持久化这些变量,请使用
SET PERSIST_ONLY
语句,这需要前面描述的权限。此外,您必须使用加密连接连接到服务器,并提供主题值为persist_only_admin_x509_subject
系统变量指定的 SSL 证书。
要从 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
语句。与设置全局运行时值相反,设置会话运行时值通常不需要特殊权限,任何用户都可以执行此操作来影响当前会话。对于某些系统变量,设置会话值可能会影响当前会话之外的内容,因此这是一项受限操作,只有拥有特殊权限的用户才能执行。
所需的权限是
SESSION_VARIABLES_ADMIN
。注意任何拥有
SYSTEM_VARIABLES_ADMIN
或SUPER
权限的用户实际上都隐式拥有SESSION_VARIABLES_ADMIN
权限,无需显式授予SESSION_VARIABLES_ADMIN
权限。
如果会话系统变量受到限制,则变量描述中会指明该限制。例如,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
角色(并且该角色处于活动状态)的用户都可以设置受限会话系统变量。但是,该用户还可以设置全局系统变量,这可能是不可取的。
通过将角色修改为拥有 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
权限(而不是通过角色)的帐户。