文档首页
MySQL 9.0 参考手册
相关文档 下载本手册
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
手册页 (TGZ) - 258.2Kb
手册页 (Zip) - 365.3Kb
信息 (Gzip) - 4.0Mb
信息 (Zip) - 4.0Mb


MySQL 9.0 参考手册  /  ...  /  系统变量权限

7.1.9.1 系统变量权限

系统变量可以具有影响整个服务器操作的全局值、仅影响当前会话的会话值,或者同时具有这两种值。

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

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

  • 对于持久化的全局系统变量,可以使用 RESET PERSISTmysqld-auto.cnf 中删除其值,以便在后续启动时影响服务器操作。

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

要设置全局系统变量,请使用带有相应关键字的 SET 语句。以下权限适用:

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

如果全局系统变量对上述权限要求有任何例外,则变量描述中会说明这些例外。例如 default_table_encryptionmandatory_roles,它们需要额外的权限。这些额外的权限适用于设置全局运行时值的 operations,但不适用于持久化该值的 operations。

要设置会话系统变量的运行时值,请使用 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 角色(并且该角色处于活动状态)的用户都能够设置受限的会话系统变量。但是,该用户还能够设置全局系统变量,这可能是不希望的。

通过将角色修改为拥有 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 权限(而不是通过角色授予)的帐户。