MySQL中不持久和持久受限系统变量的简要介绍

SET PERSISTSET PERSIST_ONLY是MySQL中用于将全局系统变量的值持久化到数据目录下的mysqld-auto.cnf选项文件的命令。但是,并非所有的系统变量都可以被持久化,或者只能在某些限制性条件下被持久化。以下是系统变量可能无法持久化或持久化受限的一些原因:

  • 会话系统变量:会话变量是针对每个客户端会话特定的,它们不能在服务器启动时设置,因此没有理由将它们持久化。

  • 敏感数据:某些全局系统变量可能包含敏感数据,例如密码、密钥等。这样的变量应该只由能够直接访问服务器主机的用户设置,而不是通过持久化文件。

  • 只读变量:有些全局系统变量是只读的,这意味着它们只能由服务器本身设置,而不能由用户通过SET命令来修改。这样的变量自然也不能被持久化。

  • 内部使用:某些全局系统变量是专为MySQL服务器内部使用而设计的,它们通常不需要也不应该被用户修改或持久化。

在MySQL 8.0.14及更高版本中,当系统变量是持久化受限的(persist-restricted)时,可以使用SET PERSIST_ONLY命令来尝试持久化这些变量的值,但这仅适用于满足以下条件的用户:

  • persist_only_admin_x509_subject系统变量被设置为了一个SSL证书X.509 Subject值。这个值通常用于指定哪些具有特定SSL证书的用户有权使用SET PERSIST_ONLY命令。

  • 用户必须使用加密连接(如SSL/TLS)连接到服务器,并且在连接时提供具有指定Subject值的SSL证书。

  • 用户必须具有足够的权限来使用SET PERSIST_ONLY命令。通常,这需要SUPER权限或类似的特权。

这个特性为管理员提供了一种安全的方式来持久化某些系统变量的值,同时限制只有那些持有特定SSL证书的用户才能执行此操作。这有助于减少未授权用户修改系统配置的风险。

需要注意的是,不是所有持久化受限的系统变量都可以通过SET PERSIST_ONLY来持久化。每个系统变量都有其特定的持久化限制和条件。

例如,protocol_version 就是一个只读的系统变量,它由MySQL服务器自身设置,因此用户无法更改其值,也无法将其持久化。

而 bind_address 是一个持久化受限的系统变量。它指定MySQL服务器应该监听的IP地址。在满足特定条件(如前面提到的SSL证书和权限要求)的情况下,用户可以使用 SET PERSIST 或 SET PERSIST_ONLY 来持久化 bind_address 的值。

以下是一些通常被认为是不可持久化的系统变量(请注意,这个列表可能会随着MySQL版本的发展而有所变化):

audit_log_current_session
audit_log_filter_id
caching_sha2_password_digest_rounds
character_set_system
core_file
have_statement_timeout
have_symlink
hostname
innodb_version
keyring_hashicorp_auth_path
keyring_hashicorp_ca_path
keyring_hashicorp_caching
keyring_hashicorp_commit_auth_path
keyring_hashicorp_commit_ca_path
keyring_hashicorp_commit_caching
keyring_hashicorp_commit_role_id
keyring_hashicorp_commit_server_url
keyring_hashicorp_commit_store_path
keyring_hashicorp_role_id
keyring_hashicorp_secret_id
keyring_hashicorp_server_url
keyring_hashicorp_store_path
large_files_support
large_page_size
license
locked_in_memory
log_bin
log_bin_basename
log_bin_index
lower_case_file_system
ndb_version
ndb_version_string
persist_only_admin_x509_subject
persisted_globals_load
protocol_version
relay_log_basename
relay_log_index
server_uuid
skip_external_locking
system_time_zone
version_comment
version_compile_machine
version_compile_os
version_compile_zlib

持久化受限(persist-restricted)系统变量是只读的,并且可以在命令行或选项文件中设置的变量(除了 persist_only_admin_x509_subject 和 persisted_globals_load 这两个特殊变量之外)。

这些持久化受限的变量通常涉及到服务器配置的关键部分,需要管理员级别的权限来修改,并且可能需要通过安全的方式(如使用SSL证书)来验证管理员的身份。

audit_log_file
audit_log_format
auto_generate_certs
basedir
bind_address
caching_sha2_password_auto_generate_rsa_keys
caching_sha2_password_private_key_path
caching_sha2_password_public_key_path
character_sets_dir
daemon_memcached_engine_lib_name
daemon_memcached_engine_lib_path
daemon_memcached_option
datadir
default_authentication_plugin
ft_stopword_file
init_file
innodb_buffer_pool_load_at_startup
innodb_data_file_path
innodb_data_home_dir
innodb_dedicated_server
innodb_directories
innodb_force_load_corrupted
innodb_log_group_home_dir
innodb_page_size
innodb_read_only
innodb_temp_data_file_path
innodb_temp_tablespaces_dir
innodb_undo_directory
innodb_undo_tablespaces
keyring_encrypted_file_data
keyring_encrypted_file_password
lc_messages_dir
log_error
mecab_rc_file
named_pipe
pid_file
plugin_dir
port
relay_log
relay_log_info_file
replica_load_tmpdir
secure_file_priv
sha256_password_auto_generate_rsa_keys
sha256_password_private_key_path
sha256_password_public_key_path
shared_memory
shared_memory_base_name
skip_networking
slave_load_tmpdir
socket
ssl_ca
ssl_capath
ssl_cert
ssl_crl
ssl_crlpath
ssl_key
tmpdir
version_tokens_session_number

为了配置MySQL服务器以启用持久化持久化受限的系统变量,可以使用以下步骤:

  • 确保MySQL配置支持加密连接

    可能需要配置SSL/TLS参数,如ssl-cassl-certssl-key等,以便服务器和客户端之间可以进行加密通信。

  • 指定一个SSL证书X.509 Subject值

    选择一个SSL证书X.509 Subject值,该值将标识具有持久化持久化受限系统变量能力的用户。然后,生成一个具有该Subject的证书。这通常涉及到使用OpenSSL或其他SSL工具来生成证书和密钥。

  • 在启动服务器时设置persist_only_admin_x509_subject

    在MySQL服务器的配置文件(如my.cnfmy.ini)中,设置persist_only_admin_x509_subject参数为您指定的Subject值。这样,服务器就知道哪些具有特定SSL证书的用户可以使用SET PERSISTSET PERSIST_ONLY命令来持久化持久化受限的系统变量。

    例如,在[mysqld]部分添加以下行:

[mysqld]
persist_only_admin_x509_subject="subject-value"
 

Subject值的格式与 CREATE USER ... REQUIRE SUBJECT相同。

您必须直接在MySQL服务器主机上执行此步骤,因为persist_only_admin_x509_subject本身在运行时无法持久化。

  • 重启MySQL服务器
  • 分发SSL证书
    将具有指定Subject值的SSL证书分发给那些需要持久化持久化受限系统变量的用户。这些用户将需要使用这个证书来建立与MySQL服务器的加密连接,并在连接时验证他们的身份。

    分发证书时,请确保:

    证书的分发可以通过电子邮件、安全的文件共享服务、内部网站或其他安全的方式来完成。请确保只有被授权的用户才能获得证书。

    • 证书的安全性得到维护,避免未经授权的访问。
    • 用户知道如何配置他们的客户端以使用此证书进行连接。
    • 用户知道他们的权限和责任,不要滥用他们的权限。

假设myclient-cert.pem是可以持久化受限制系统变量的客户端要使用的SSL证书。使用openssl命令显示证书内容:

$> openssl x509 -text -in myclient-cert.pem
Certificate:Data:Version: 3 (0x2)Serial Number: 2 (0x2)Signature Algorithm: md5WithRSAEncryptionIssuer: C=US, ST=IL, L=Chicago, O=MyOrg, OU=CA, CN=MyCNValidityNot Before: Oct 18 17:03:03 2018 GMTNot After : Oct 15 17:03:03 2028 GMTSubject: C=US, ST=IL, L=Chicago, O=MyOrg, OU=client, CN=MyCN
...

当使用OpenSSL工具生成或查看SSL证书时,输出将包含证书的各种信息,其中之一是Subject值。Subject是一个描述证书所有者的字段,通常包含一些标识信息,如国家/地区名、组织名、组织单位名、常用名等。

在OpenSSL的输出中显示证书Subject值的示例如下:

C=US, ST=IL, L=Chicago, O=MyOrg, OU=client, CN=MyCN

要指定MySQL的主题,请使用以下格式:

/C=US/ST=IL/L=Chicago/O=MyOrg/OU=client/CN=MyCN

使用Subject值配置服务器my.cnf文件:

[mysqld]
persist_only_admin_x509_subject="/C=US/ST=IL/L=Chicago/O=MyOrg/OU=client/CN=MyCN"

重新启动服务器,使新配置生效。

将SSL证书(以及任何其他关联的SSL文件)分发给相应的用户。然后,这样的用户使用证书和建立加密连接所需的任何其他SSL选项连接到服务器。

要使用X.509,客户端必须指定要连接的 --ssl-key和 --ssl-cert选项。建议但不要求同时指定

 --ssl-ca,以便验证服务器提供的公共证书。例如:

$> mysql --ssl-key=myclient-key.pem --ssl-cert=myclient-cert.pem --ssl-ca=mycacert.pem

假设用户有足够的权限使用SET PERSIST_ONLY,那么可以像这样持久化受限制的系统变量:

mysql> SET PERSIST_ONLY socket = '/tmp/mysql.sock';
Query OK, 0 rows affected (0.00 sec)

如果服务器未配置为启用持久化受限制的系统变量,或者用户不满足该功能所需的条件,则会发生错误:

mysql> SET PERSIST_ONLY socket = '/tmp/mysql.sock';
ERROR 1238 (HY000): Variable 'socket' is a non persistent read only variable

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/33210.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微信小程序开发用uni-app开发框架还是微信原生开发?

小程序依托微信入口,借助微信生态对流量补充的优势,拥有超12亿微信用户群体,微信小程序成为流量变现的一个重要通道。 从商家角度来说,借助小程序触达和获取线上用户的门槛更低,用户路径和交易转化也更快。同时&#…

Jmeter多用户token使用问题

背景 在测试的时候,经常会有模拟用户登录,拿到用户 token 后再去请求接口的场景。 这个模拟用户登录就会分为两种,一种是单用户,另一种是多用户。 日常自动化测试的时候可能一个用户对应 n 个用例就可以满足大多数场景&#xf…

MySQL集群高可用架构之MySQL InnoDB Cluste

今天我将详细的为大家介绍Centos 7.5 基于 MySQL 5.7的 InnoDB Cluster 多节点高可用集群环境部署的相关知识,希望大家能够从中收获多多!如有帮助,请点在看、转发支持一波!!! 一、MySQL InnoDB Cluster 介…

RK3568平台(音频篇)音频ALSA框架

一.ALSA框架简介 ALSA表示先进linux声音架构(Advanced Linux Sound Archiecture),它由一系列的内核驱动、应用程序编程接口(API)以及支持linux下声音的应用程序组成、 ALSA项目发起的原有是linux下的声卡驱动&#x…

PAT A1016. 最短路径

题意 有N个结点围成一个圈,相邻两个点之间的距离已知,且每次只能移动到相邻点。然后给出M个询问,每个询问给出两个数字A和B即结点编号(1≤A,B≤N),求从A号结点到B号结点的最短距离。样例解释 如图3-2所示,共有5个结点,…

Spring Cloud:构建分布式系统的利器

引言 在当今的云计算和微服务架构时代,构建高效、可靠的分布式系统成为软件开发的重要任务。Spring Cloud 提供了一套完整的解决方案,帮助开发者快速构建分布式系统中的一些常见模式(例如配置管理、服务发现、断路器等)。本文将探…

薄冰英语语法学习--名词1

我用来教我自己3岁的小孩的。 有特殊的情况,暂时先不用管,3岁小孩,只用全部按非特殊情况算就ok了,以后长大了,遇到问题了,再微调一下。先解决百分之90的问题。 一般的复数,直接加s 特殊的词尾…

海南云亿商务咨询有限公司抖音电商服务领军企业

在数字化浪潮席卷全球的今天,电商行业已成为推动经济发展的重要引擎。而抖音,作为短视频领域的佼佼者,其独特的商业模式和庞大的用户群体,为电商行业带来了前所未有的机遇。海南云亿商务咨询有限公司,正是把握这一时代…

Java中的并发编程问题与解决方案

Java中的并发编程问题与解决方案 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们将探讨Java中的并发编程问题及其解决方案。随着多核处理器的普及和应用…

使用 JavaScript 的 SpeechRecognition API 实现语音识别

在现代的 Web 开发中,语音识别已经成为一个非常有用的功能。通过浏览器提供的 SpeechRecognition API,我们可以在网页上实现语音输入的识别功能。本文将介绍如何使用 JavaScript 和 SpeechRecognition API 来实现简单的语音识别功能。 什么是 SpeechRec…

如何通过isAccessAllowed方法实现访问控制

如何通过isAccessAllowed方法实现访问控制 在Web应用开发中,确保用户的访问权限是至关重要的。本文将详细讲解一个自定义的 isAccessAllowed 方法是如何实现这一功能的。我们将逐步解析这段代码,并探讨它的安全性和实现细节。 相关框架和类简介 在开始…

gd32-DMA测试

1)内存到内存 uint8_t srcBuf[8] {0,1,2,3,4,5,6,7}; uint8_t dstBuf[8]; void DMA_M2M_Test(void) { //DMA0测试中,内存到内存不可以,不知道什么情况; // dma_multi_data_parameter_struct dma_init_parameter; // rc…

MySQL数据库练习----简易药品管理系统

CREATE TABLE user (userId int(11) NOT NULL AUTO_INCREMENT COMMENT 用户ID,userName varchar(255) NOT NULL COMMENT 用户名,account varchar(255) NOT NULL COMMENT 账号,password varchar(255) NOT NULL COMMENT 密码,createtime datetime NOT NULL COMMENT 创建时间,PRIM…

《C语言深度解剖》(20):动态内存管理中的易错点和避坑指南

🤡博客主页:醉竺 🥰本文专栏:《C语言深度解剖》 😻欢迎关注:感谢大家的点赞评论关注,祝您学有所成! ✨✨💜💛想要学习更多C语言深度解剖点击专栏链接查看&…

智能推荐系统:技术解析与实践指南

智能推荐系统:技术解析与实践指南 背景与挖掘目标 在互联网信息爆炸的今天,用户在海量内容中筛选感兴趣的信息变得日益困难。因此,搜索引擎结合推荐系统的模式应运而生。本章节将深入探讨推荐系统,其核心目标如下: …

Mybatis动态sql标签

动态SQL标签简介: MyBatis的一个强大的特性之一通常是它的动态SQL能力。如果你有使用JDBC或其他相似框架的经验,你就明白条件地串联SQL字符串在一起是多么的痛苦,确保不能忘了空格或在列表的最后省略逗号。动态SQL可以彻底处理这种痛苦。 Mybatis中实现动态sql的标签有&#x…

【Help】Ubuntu卸载原生版本python后图像化界面消失

1. 开机进入tty界面,登录账号和密码 2. ping www.baidu.com 检测网络连接 2.1 若出现菱形乱码,则修改语言位英文 LANG"en_US.UTF-8" LANGUAGE"en_US:en" 2.2 如果没有网络连接,则 查找可用wifi:nmcli dev …

【论文速读】|利用大语言模型实现现实世界代码的翻译:一项针对翻译到Rust语言的研究

本次分享论文:Towards Translating Real-World Code with LLMs: A Study of Translating to Rust 基本信息 原文作者:Hasan Ferit Eniser, Hanliang Zhang, Cristina David, Meng Wang, Maria Christakis, Brandon Paulsen, Joey Dodds, Daniel Kroeni…

Maven之介绍

目录 一、简介 (2)为什么学习Maven? 二、小结 一、简介 (1)Maven 是一个 Java 项目管理和构建工具。它可以定义项目结构、项目依赖,并使用统一的方式进行自动化构建,是Java项目不可缺少的工具…

《FFmpeg开发实战:从零基础到短视频上线》资源下载和内容勘误

资源下载 下面是《FFmpeg开发实战:从零基础到短视频上线》一书用到的工具和代码资源: 1、本书使用的FFmpeg版本为FFmpeg 5.1.2,也可在FFmpeg的github主页上下载最新的FFmpeg源码。 2、本书第12章使用的Android Studio版本为Android Studio D…