Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

MySQL 8.3 Reference Manual  /  ...  /  System Variable Privileges

7.1.9.1 系统变量权限

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

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

  • 对于某些全局系统变量,SET 可以用于将其值持久化到数据目录中的 mysqld-auto.cnf 文件中,以影响服务器的后续启动。(关于持久化系统变量和 mysqld-auto.cnf 文件的信息,请参阅 第 7.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 启用管理员将用户的权限 footprint 最小化,例如,之前授予 SYSTEM_VARIABLES_ADMINSUPER 的用户,以便他们可以修改受限的会话系统变量。假设管理员创建了以下角色,以授予设置受限会话系统变量的能力:

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 权限的账户,而不是通过角色授予。