【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_ADMINPERSIST_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_ADMINSUPER权限。
对于只读系统变量,RESET PERSIST 需要SYSTEM_VARIABLES_ADMINPERSIST_RO_VARIABLES_ADMIN权限。
对于持久受限变量 (无法持久化的变量),RESET PERSIST不需要使用特定SSL证书加密连接到服务器。


如果全局系统变量对前面的权限请求有任何异常,则变量描述会指示这些异常。

示例包括default_table_encryptioncommandory_roles,它们需要额外的权限。

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

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

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

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

在MySQL 8.0.14之前,所需的权限是SYSTEM_VARIABLES_ADMINSUPER


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

示例包括binlog_formatsql_log_bin

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

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

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权限不是通过角色授予的任何帐户

相关推荐
tatasix3 分钟前
MySQL UPDATE语句执行链路解析
数据库·mysql
南城花随雪。16 分钟前
硬盘(HDD)与固态硬盘(SSD)详细解读
数据库
儿时可乖了17 分钟前
使用 Java 操作 SQLite 数据库
java·数据库·sqlite
懒是一种态度19 分钟前
Golang 调用 mongodb 的函数
数据库·mongodb·golang
天海华兮21 分钟前
mysql 去重 补全 取出重复 变量 函数 和存储过程
数据库·mysql
gma9991 小时前
Etcd 框架
数据库·etcd
爱吃青椒不爱吃西红柿‍️1 小时前
华为ASP与CSP是什么?
服务器·前端·数据库
Yz98762 小时前
hive的存储格式
大数据·数据库·数据仓库·hive·hadoop·数据库开发
武子康2 小时前
大数据-231 离线数仓 - DWS 层、ADS 层的创建 Hive 执行脚本
java·大数据·数据仓库·hive·hadoop·mysql
黑色叉腰丶大魔王2 小时前
《MySQL 数据库备份与恢复》
mysql