【MySQL精通之路】系统变量-系统变量权限

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

对于动态系统变量 ,SET语句可用于更改其全局 或会话运行时值(或同时更改两者),以影响当前服务器实例的操作。

(有关动态变量的信息,请参阅"动态系统变量"。)

【MySQL精通之路】系统变量-动态系统变量-CSDN博客
对于某些全局系统变量 ,SET可以用于将其值保存到数据目录中的mysqld-auto.cnf文件中,以影响后续启动的服务器操作。

(有关持久化系统变量和mysqld-auto.cnf文件的信息,请参阅"持久化的系统变量"。)

【MySQL精通之路】系统变量-持久化系统变量-CSDN博客
对于持久化 的全局系统变量 ,RESET PERSIST 可以用于从mysqld-auto.cnf中删除它们的值,以影响后续启动的服务器操作。

1.运行时的全局系统变量设置所需权限

本节介绍在运行时为系统变量赋值的操作所需的权限 。这包括影响运行时值的操作和**保持值(永久修改)**的操作。

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

要设置全局系统变量运行时值,请使用SET GLOBAL 语句,该语句需要SYSTEM_VARIABLES_ADMIN权限(或SUPER权限,ps:不推荐使用)。
要将全局系统变量持久化到mysqld-auto.cnf文件(并设置运行时值)

请使用SET PERSIST 语句,该语句需要SYSTEM_VARIABLES_ADMIN或SUPER权限。
要将全局系统变量持久化到mysqld-auto.cnf文件(不设置运行时值)

请使用SET PERSIST_ONLY语句

该语句需要SYSTEM_VARIABLES_ADMIN 和PERSIST_RO_VARIABLES_ADMIN 权限。SET PERSIST_ONLY 既可用于动态系统变量 ,也可用于只读系统变量 ,但对于不能使用SET PERSIST的持久只读变量特别有用。
一些全局系统变量是持久受限的

(见"不持久和持久受限的系统变量")。

博主PS:或者可以称做临时系统变量

要持久化这些变量,请使用SET PERSIST_ONLY语句,该语句需要前面描述的权限。

此外,您必须使用加密连接连接到服务器 ,并提供具有由persist_only_admin_x509_subject系统变量指定的Subject值的SSL证书。

要从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 和commandory_roles,它们需要额外的权限。

这些附加权限适用于设置全局运行时值的操作,但不适用于保留该值的操作。

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

从MySQL 8.0.14开始,所需的权限为SESSION_VARIABLES_ADMIN。
注意:

任何具有SYSTEM_VARIABLES_ADMIN 或SUPER 的用户实际上隐含地具有SESSION_VARIABLES _ADMIN ,并且无需明确授予SESSION_VARIABLES_AADMIN。

在MySQL 8.0.14之前,所需的权限是SYSTEM_VARIABLES_ADMIN 或SUPER。


如果会话系统变量 受到限制,则变量描述会指示该限制。

示例包括binlog_format 和sql_log_bin。

设置这些变量的会话值会影响当前会话的二进制日志记录,但也可能对服务器复制和备份的完整性产生更广泛的影响。

SESSION_VARIABLES_ADMIN 使管理员能够最大限度地减少先前可能已被授予SYSTEM_VARIABLES _ADMIN 或SUPER 的用户的权限占用,以使他们能够修改受限制的会话系统变量。假设管理员创建了以下角色以授予设置受限会话系统变量的能力:

sql 复制代码
CREATE ROLE set_session_sysvars;
GRANT SYSTEM_VARIABLES_ADMIN ON *.* TO set_session_sysvars;

任何被授予set_session_sysvars 角色的用户(以及该角色处于活动状态 的用户)都可以设置受限制的会话系统变量。

然而,该用户也能够设置全局系统变量,这可能是不希望的。

通过将角色修改为具有SESSION_VARIABLES_ADMIN 而不是SYSTEM_VARIABLES _ADMIN ,可以将角色权限减少 为设置受限会话系统变量的能力,而不设置其他内容。

要修改角色,请使用以下语句:

sql 复制代码
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权限 而不是通过角色授予的任何帐户。

相关推荐
IvorySQL8 小时前
PostgreSQL 日报|修复截断 zstd 备份检测(10 月 9 日)
数据库·postgresql
刘胡子大叔8 小时前
SQL 脚本的导入顺序
数据库·sql
代码什么用9 小时前
Spring对IoC的实现
数据库·spring
hz5678911 小时前
涉密视频会议设备配置指南:终端、音视频采集与配套设施选型
服务器·网络·数据库·安全·实时音视频·信息与通信·智能硬件
广州浮点FLOATLIC11 小时前
许可证服务器迁移后软件打不开:研发 IT 怎样定位连接问题
linux·服务器·数据库
程序员Sunday11 小时前
MySQL 为什么使用 B+ 树索引?把范围查询、回表和覆盖索引连起来
数据库·mysql
半杯咖啡半行码11 小时前
Qt开发实战:数据库、MV 模式、QProcess与串口通信全攻略
数据库·qt
Yyyyyy~11 小时前
[ Mysql ] 库的操作
mysql
小米里的大麦12 小时前
16 MySQL 事务
数据库·mysql
西柚小萌新12 小时前
【LLM&&AI应用开发 八股文】--4.3.Agent智能体(下)
java·开发语言·数据库