SET PERSIST 和SET PERSIST_ONLY 是MySQL 命令,用于将全局系统变量的值保存到数据目录中的mysqld-auto.cnf 选项文件中。然而,并非所有系统变量都可以持久化,并且只有在某些有限的条件下才可以持久化。系统变量不持久或持久性有限的原因包括:
会话系统变量:会话变量特定于每个客户端会话,无法在服务器启动时设置,因此没有理由让它们持久化。
敏感数据:一些全局系统变量可能包含敏感数据,例如密码和密钥。此类变量只能由能够直接访问服务器主机的用户设置,而不是通过持久文件设置。
只读变量:一些全局系统变量是只读的。即只能由服务器本身设置,不能由用户使用SET命令更改。当然,这样的变量不能持久化。
内部使用:某些全局系统变量专为MySQL 服务器内部使用而设计,通常不需要用户修改或保留。
从MySQL 8.0.14 开始,如果系统变量有持久化限制,可以使用SET PERSIST_ONLY 命令使这些变量的值持久化,前提是满足以下条件: 仅适用于
persist_only_admin_x509_subject 系统变量设置为SSL 证书的X.509 主题值。该值通常用于指定允许哪些具有特定SSL 证书的用户使用SET PERSIST_ONLY 命令。
用户必须使用加密连接(例如SSL/TLS)连接到服务器,并在连接时提供具有指定主题值的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 版本的发展,此列表可能会发生变化):
审核日志_当前会话
审计日志过滤器id
caching_sha2_password_digest_rounds
字符集系统
核心文件
有语句超时
有符号链接
主机名
innodb_版本
keyring_bashicorp_auth_path
keyring_bashicorp_ca_path
keyring_bashicorp_caching
keyring_bashicorp_commit_auth_path
keyring_bashicorp_commit_ca_path
keyring_bashicorp_commit_caching
keyring_bashicorp_commit_role_id
keyring_bashicorp_commit_server_url
keyring_bashicorp_commit_store_path
keyring_bashicorp_role_id
keyring_bashicorp_secret_id
keyring_bashicorp_server_url
keyring_bashicorp_store_path
大文件支持
大页面尺寸
执照
锁在记忆里
登录
log_bin_basename
日志bin索引
小写文件系统
ndb_版本
ndb_版本_字符串
persist_only_admin_x509_subject
持久全局负载
协议版本
中继日志库名称
中继日志索引
服务器uuid
跳过外部锁
系统时区
版本_评论
版本_编译_机器
版本编译操作系统
版本_编译_zlib
持久受限系统变量是只读的,可以在命令行或选项文件中设置(特殊变量persist_only_admin_x509_subject 和persisted_globals_load 除外)。
这些有限持久性变量通常会触及服务器配置的关键部分,需要管理员级别的权限才能修改,并且有时会通过安全方式(例如使用SSL 证书)进行修改以验证管理员的身份。
审计日志文件
审核日志格式
自动生成证书
基目录
绑定地址
caching_sha2_password_auto_generate_rsa_keys
caching_sha2_password_private_key_path
caching_sha2_password_public_key_path
字符集目录
daemon_memcached_engine_lib_name
daemon_memcached_engine_lib_path
daemon_memcached_option
数据目录
默认身份验证插件
ft_stopword_file
初始化文件
innodb_buffer_pool_load_at_startup
innodb_数据文件_路径
innodb_data_home_dir
innodb_d专用服务器
innodb_目录
innodb_force_load_corrupted
innodb_log_group_home_dir
innodb_page_size
innodb_只读
innodb_temp_data_file_path
innodb_temp_tablespaces_dir
innodb_undo_directory
innodb_undo_表空间
密钥环加密的文件数据
密钥环加密文件密码
lc_messages_dir
记录错误
mecab_rc_文件
命名管道
pid_文件
插件目录
港口
中继日志
中继日志信息文件
副本加载临时目录
安全文件权限
sha256_password_auto_generate_rsa_keys
sha256_password_private_key_path
sha256_password_public_key_path
共享内存
共享内存基名称
跳过_网络
从属加载临时目录
插座
ssl_ca
ssl_capath
ssl_证书
ssl_crl
ssl_crl路径
ssl_key
临时目录
version_tokens_session_number
您可以使用以下步骤来配置MySQL 服务器,以启用具有有限持久性的系统变量的持久性。
确保您的MySQL 配置支持加密连接。
您可能需要配置SSL/TLS参数,例如ssl-ca、ssl-cert和ssl-key,以确保服务器和客户端之间的加密通信。
指定SSL 证书X.509 主题值。
为SSL 证书X.509 主题选择一个值,该值标识能够保留受限系统变量的用户。接下来,生成带有主题的证书。这通常涉及使用OpenSSL 或其他SSL 工具生成证书和密钥。
启动服务器时设置persist_only_admin_x509_subject。
在MySQL 服务器配置文件(例如my.cnf 或my.ini)中,将persist_only_admin_x509_subject 参数设置为指定的主题值。通过这种方式,服务器知道哪些具有特定SSL 证书的用户可以使用SET PERSIST 或SET PERSIST_ONLY 命令以有限的持久性保留系统变量。
例如,将以下行添加到[mysqld] 部分:
[mysqld]
persist_only_admin_x509_subject=\’主题值\’
主题值的格式与CREATE USER . REQUIRE SUBJECT 相同。
此步骤必须直接在MySQL 服务器主机上执行,因为persist_only_admin_x509_subject 本身无法在运行时持久化。
重启MySQL服务器并分发SSL证书。
将具有指定主题值的SSL 证书分发给需要保留受限系统变量的用户。这些用户必须使用此证书与MySQL 服务器建立加密连接,并在连接时验证其身份。
分发证书时,请确保以下事项:
证书分发可以通过电子邮件、安全文件共享服务、内部网站或其他安全方式完成。确保只有授权用户才能检索证书。
维护证书安全以避免未经授权的访问。用户知道如何配置客户端以使用此证书进行连接。用户了解自己的权限和责任,不得滥用权限。
假设myclient-cert.pem 是客户端使用的SSL 证书,可以保留受限制的系统变量。使用openssl 命令查看证书的内容。
$ openssl x509 -text -in myclient-cert.pem
证书:
数据:
版本: 3 (0x2)
序列号: 2 (0x2)
包含签名算法: md5RSA加密
出版商: C=US、ST=IL、L=芝加哥、O=MyOrg、OU=CA、CN=MyCN
有效的
此前: 10 月18 日17:03:03 2018 GMT
: 10 月15 日之后17:03:03 2028 GMT
主题: C=US、ST=伊利诺伊州、L=芝加哥、O=MyOrg、OU=客户、CN=MyCN
.
当您使用OpenSSL 工具生成或查看SSL 证书时,输出包括有关证书的各种信息。其中之一是主题值。主题是描述证书所有者的字段,通常包括识别信息,例如国家/地区名称、组织名称、组织单位名称或通用名称。
在OpenSSL 输出中显示证书的主题值的示例如下:
C=美国、ST=伊利诺伊州、L=芝加哥、O=MyOrg、OU=客户、CN=MyCN
要指定MySQL 主题,请使用以下格式:
/C=US/ST=IL/L=芝加哥/O=MyOrg/OU=Client/CN=MyCN
使用主题值配置服务器的my.cnf 文件。
[mysqld]
persist_only_admin_x509_subject=\’/C=US/ST=IL/L=芝加哥/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 套接字=\’/tmp/mysql.sock\’;
查询正常,0 行受影响(0.00 秒)
如果服务器未配置为启用受限系统变量的持久性,或者用户不满足此功能的要求,则会发生错误。
mysql SET PERSIST_ONLY 套接字=\’/tmp/mysql.sock\’;
错误1238 (HY000): 变量“socket”是非持久只读变量
#以上对MySQL中非持久性和持久性受限系统变量的简单介绍相关内容来源网络,仅供参考。相关信息请参见官方公告。
原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/91963.html