系统变量可以具有一个全局值,该全局值影响整个服务器的运行,一个会话值仅影响当前会话,或同时影响这两个值:
对于动态系统变量,该 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文件中(并设置运行时值),请使用SET PERSIST需要SYSTEM_VARIABLES_ADMINor 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证书,其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角色的用户(并且具有该角色的角色)都可以设置受限的会话系统变量。但是,该用户还能够设置全局系统变量,这可能是不希望的。
通过将角色修改为具有 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直接授予的任何帐户,而不是通过角色进行的帐户 。




