Spec-Zone.ru › MySQL 8.4

7.1.9.4 Неперсистируемые и ограниченные в персистенции системные переменные

SET PERSIST и SET PERSIST_ONLY позволяют сохранять глобальные системные переменные в файле параметров mysqld-auto.cnf в каталоге данных (см. Раздел 15.7.6.1, «SET Синтаксис для присваивания переменных»). Однако не все системные переменные могут быть сохранены или могут быть сохранены только при определенных ограниченных условиях. Вот некоторые причины, по которым системная переменная может быть неперсистируемой или ограниченной в персистенции:

  • Переменные сессии не могут быть сохранены. Переменные сессии не могут быть установлены при запуске сервера, поэтому нет причины сохранять их.

  • Глобальная системная переменная может содержать конфиденциальные данные, поэтому ее можно устанавливать только пользователю с прямым доступом к хосту сервера.

  • Глобальная системная переменная может быть только для чтения (то есть устанавливается только сервером). В этом случае ее вообще нельзя устанавливать пользователям, ни при запуске сервера, ни во время выполнения.

  • Глобальная системная переменная может быть предназначена только для внутреннего использования.

Неперсистируемые системные переменные не могут быть сохранены ни при каких обстоятельствах. Ограниченные в персистенции системные переменные могут быть сохранены с помощью SET PERSIST_ONLY, но только пользователями, для которых выполняются следующие условия:

  • Переменная системы persist_only_admin_x509_subject устанавливается в значение SSL сертификата X.509 Subject.

  • Пользователь подключается к серверу с помощью зашифрованного соединения и предоставляет SSL-сертификат с указанным значением Subject.

  • Пользователь имеет достаточные привилегии для использования SET PERSIST_ONLY (см. Раздел 7.1.9.1, «Привилегии на системные переменные»).

Например, protocol_version доступна только для чтения и устанавливается только сервером, поэтому она не может быть сохранена ни при каких обстоятельствах. С другой стороны, bind_address ограничена в персистенции, поэтому ее могут устанавливать пользователи, удовлетворяющие вышеуказанным условиям.

Следующие системные переменные неперсистируемые. Этот список может измениться в ходе разработки.

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_only_admin_x509_subject и persisted_globals_load. Этот список может измениться в ходе разработки.

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
datadir
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
lc_messages_dir
log_error
mecab_rc_file
named_pipe
pid_file
plugin_dir
port
relay_log
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

Чтобы настроить сервер для сохранения ограниченных в персистенции системных переменных, выполните следующие действия:

  1. Убедитесь, что MySQL настроен на поддержку зашифрованных соединений. См. Раздел 8.3.1, «Настройка MySQL для использования зашифрованных соединений».

  2. Укажите значение SSL сертификата X.509 Subject, которое указывает на возможность сохранения ограниченных в персистенции системных переменных, и создайте сертификат с этим Subject. См. Раздел 8.3.3, «Создание SSL и RSA сертификатов и ключей».

  3. Запустите сервер с persist_only_admin_x509_subject установленным на указанное значение Subject. Например, поместите эти строки в ваш файл сервера my.cnf:

    [mysqld]
    persist_only_admin_x509_subject="subject-value"
    

    Формат значения Subject совпадает с форматом, используемым для CREATE USER ... REQUIRE SUBJECT. См. Раздел 15.7.1.3, «CREATE USER Statement».

    Вы должны выполнить этот шаг непосредственно на хосте MySQL сервера, так как persist_only_admin_x509_subject сам не может быть сохранен во время выполнения.

  4. Перезапустите сервер.

  5. Распространите SSL-сертификат, имеющий указанное значение Subject, пользователям, которым разрешено сохранять ограниченные в персистенции системные переменные.

Предположим, что myclient-cert.pem — это SSL-сертификат, который будут использовать клиенты, которые могут сохранять ограниченные в персистенции системные переменные. Отобразите содержимое сертификата с помощью команды openssl:

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

Вывод openssl показывает, что значение Subject сертификата:

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

Чтобы указать Subject для MySQL, используйте следующий формат:

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

Настройте файл сервера my.cnf со значением Subject:

[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

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-8.4-en/nonpersistible-system-variables.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API