一个系统变量可以有一个全局值影响整个服务器的操作,也可以有一个只影响当前会话的会话值,或者两者都有:
对于动态系统变量,
集
语句可用于更改它们的全局或会话运行时值(或两者),以影响当前服务器实例的操作。(有关动态变量的信息,请参见第5.1.9.2节“动态系统变量”.)对于某些全局系统变量,
集
可用于将它们的值持久化到mysqld-auto.cnf
数据目录下的文件,以影响后续启动服务器的操作。有关持久化系统变量和mysqld-auto.cnf
文件的更多信息,请参考第5.1.9.3节“持久系统变量”.)对于持久的全局系统变量,
重置持续
可以用来移除它们的价值mysqld-auto.cnf
,以影响后续启动时的服务器操作。
本节描述在运行时为系统变量赋值的操作所需的特权。这包括影响运行时值的操作,以及保存值的操作。
若要设置全局系统变量,请使用集
语句,并使用适当的关键字。这些特权适用于:
要设置全局系统变量运行时值,请使用
集全球
语句,该语句需要SYSTEM_VARIABLES_ADMIN
特权(或已弃用的超级
特权)。将全局系统变量持久化到
mysqld-auto.cnf
文件(并设置运行时值),使用设置保存
语句,该语句需要SYSTEM_VARIABLES_ADMIN
或超级
特权。将全局系统变量持久化到
mysqld-auto.cnf
文件(不设置运行时值),使用设置PERSIST_ONLY
语句,该语句需要SYSTEM_VARIABLES_ADMIN
而且PERSIST_RO_VARIABLES_ADMIN
特权。设置PERSIST_ONLY
可用于动态和只读的系统变量,但对于持久化只读变量尤其有用设置保存
无法使用。一些全局系统变量是受持久化限制的(参见第5.1.9.4节“非持久化和持久化限制的系统变量”).要持久保存这些变量,请使用
设置PERSIST_ONLY
语句,它需要前面描述的特权。控件指定的Subject值必须使用加密连接连接到服务器,并提供SSL证书persist_only_admin_x509_subject
系统变量。
控件中删除持久化的全局系统变量mysqld-auto.cnf
文件,使用重置持续
声明。这些特权适用于:
对于动态系统变量,
重置持续
要求SYSTEM_VARIABLES_ADMIN
或超级
特权。对于只读的系统变量,
重置持续
要求SYSTEM_VARIABLES_ADMIN
而且PERSIST_RO_VARIABLES_ADMIN
特权。对于受持久性限制的变量,
重置持续
不需要使用特定SSL证书建立到服务器的加密连接。
如果全局系统变量对上述权限要求有任何例外,则由变量描述来标识这些例外。例子包括default_table_encryption
而且mandatory_roles
,这需要额外的特权。这些附加特权适用于设置全局运行时值的操作,但不适用于保存该值的操作。
要设置会话系统变量运行时值,请使用设置会话
声明。与设置全局运行时值相比,设置会话运行时值通常不需要特殊权限,任何用户都可以执行此操作来影响当前会话。对于某些系统变量,设置会话值可能在当前会话之外产生影响,因此是一种受限制的操作,只有具有特殊权限的用户才能执行:
从MySQL 8.0.14开始,所需的特权是
SESSION_VARIABLES_ADMIN
.请注意任何有
SYSTEM_VARIABLES_ADMIN
或超级
有效地有SESSION_VARIABLES_ADMIN
暗示而不需要给予SESSION_VARIABLES_ADMIN
明确。在MySQL 8.0.14之前,所需的特权是
SYSTEM_VARIABLES_ADMIN
或超级
.
当会话系统变量被限制时,变量的描述信息表示该限制。例子包括binlog_format
而且sql_log_bin
.设置这些变量的会话值会影响当前会话的二进制日志记录,但也可能对服务器复制和备份的完整性产生更广泛的影响。
SESSION_VARIABLES_ADMIN
使管理员能够最小化以前可能被授予的用户的特权占用SYSTEM_VARIABLES_ADMIN
或超级
目的是使他们能够修改受限制的会话系统变量。假设管理员创建了以下角色来授予设置受限会话系统变量的能力:
CREATE ROLE set_session_sysvars在*上授予system_variable_admin。* set_session_sysvars;
任何被授予set_session_sysvars
角色(以及激活该角色的人)能够设置受限制的会话系统变量。然而,该用户还能够设置全局系统变量,这可能是不需要的。
通过修改角色来拥有SESSION_VARIABLES_ADMIN
而不是SYSTEM_VARIABLES_ADMIN
,角色特权可以简化为只能设置受限制的会话系统变量,而不能设置其他任何权限。要修改角色,使用以下语句:
在*上授予session_variable_admin。* set_session_sysvars;在*上撤销system_variables_admin。* FROM set_session_sysvars;
修改角色会立即产生效果:任何被授予set_session_sysvars
角色不再有SYSTEM_VARIABLES_ADMIN
并且在没有明确授予该能力的情况下,不能设置全局系统变量。一个类似的格兰特
/撤销
序列可以应用到任何被授予的帐户SYSTEM_VARIABLES_ADMIN
直接而不是通过角色。