系统变量可以具有全局值,影响服务器的整体操作,会话值,仅影响当前会话,或者两者都有:
-
对于动态系统变量,
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
语句,需要之前描述的权限。此外,您还必须使用加密连接连接到服务器,并提供一个 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
语句。与设置全局运行时值不同,设置会话运行时值通常不需要特殊权限,可以由任何用户在当前会话中进行。但是,对于某些系统变量,设置会话值可能会对当前会话外产生影响,因此是受限操作,仅可由拥有特殊权限的用户执行:
-
所需的权限是
SESSION_VARIABLES_ADMIN
。Note任何拥有
SYSTEM_VARIABLES_ADMIN
或SUPER
的用户实际上拥有SESSION_VARIABLES_ADMIN
权限,不需要明确授予SESSION_VARIABLES_ADMIN
。
如果会话系统变量受到限制,变量描述将指示该限制。例如 binlog_format
和 sql_log_bin
。设置这些变量的会话值将影响当前会话的二进制日志记录,但也可能对服务器复制和备份的完整性产生更广泛的影响。
SESSION_VARIABLES_ADMIN
启用管理员将用户的权限 footprint 最小化,例如,之前授予 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
权限的账户,而不是通过角色授予。