Documentation Home

5.1.9.1 系统变量权限

一个系统变量可以有一个影响整个服务器操作的全局值,一个只影响当前会话的会话值,或者两者都有:

  • 对于动态系统变量,该 SET 语句可用于更改它们的全局或会话运行时值(或两者),以影响当前服务器实例的操作。(有关动态变量的信息,请参阅第 5.1.9.2 节,“动态系统变量”。)

  • 对于某些全局系统变量, SET 可用于将其值持久化到 mysqld-auto.cnf数据目录下的文件中,以影响后续启动的服务器运行。(有关持久化系统变量和mysqld-auto.cnf文件的信息,请参阅 第 5.1.9.3 节,“持久化系统变量”。)

  • 对于持久化的全局系统变量, RESET PERSIST可用于从 中删除它们的值 mysqld-auto.cnf,以影响后续启动的服务器操作。

本节介绍在运行时为系统变量赋值的操作所需的权限。这包括影响运行时值的操作和持久化值的操作。

要设置全局系统变量,请使用 SET 带有适当关键字的语句。这些特权适用:

要从 mysqld-auto.cnf文件中删除持久化的全局系统变量,请使用该 RESET PERSIST语句。这些特权适用:

如果全局系统变量对上述权限要求有任何例外,则变量描述会指示这些例外。示例包括 default_table_encryptionmandatory_roles,它们需要额外的权限。这些附加权限适用于设置全局运行时值的操作,但不适用于保留该值的操作。

要设置会话系统变量运行时值,请使用 SET SESSION语句。与设置全局运行时值相比,设置会话运行时值通常不需要特殊权限,任何用户都可以影响当前会话。对于某些系统变量,设置会话值可能会在当前会话之外产生影响,因此是一个受限操作,只能由具有特殊权限的用户完成:

如果会话系统变量受到限制,则变量描述会指示该限制。示例包括 binlog_formatsql_log_bin。设置这些变量的会话值会影响当前会话的二进制日志记录,但也可能对服务器复制和备份的完整性产生更广泛的影响。

SESSION_VARIABLES_ADMIN使管理员能够最大限度地减少以前可能已被授予 SYSTEM_VARIABLES_ADMINSUPER允许他们修改受限会话系统变量的用户的权限足迹。假设管理员创建了以下角色以授予设置受限会话系统变量的能力:

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直接授予而不是通过角色授予的任何帐户。