Spec-Zone.ru › MySQL 9.2

7.1.9.1 Привилегии переменных системы

Переменная системы может иметь глобальное значение, влияющее на работу всего сервера, сессионное значение, влияющее только на текущую сессию, или оба значения:

  • Для динамических переменных системы, оператор SET может использоваться для изменения их глобального или сессионного значения во время выполнения (или обоих), чтобы повлиять на работу текущего экземпляра сервера. (Для получения информации о динамических переменных, см. Раздел 7.1.9.2, «Динамические переменные системы».)

  • Для некоторых глобальных переменных системы, оператор SET может использоваться для сохранения их значения в файл mysqld-auto.cnf в каталоге данных, чтобы повлиять на работу сервера при последующих запусках. (Для получения информации о сохранении переменных системы и файле mysqld-auto.cnf, см. Раздел 7.1.9.3, «Сохранённые переменные системы».)

  • Для сохранённых глобальных переменных системы, оператор RESET PERSIST может использоваться для удаления их значения из файла mysqld-auto.cnf, чтобы повлиять на работу сервера при последующих запусках.

Этот раздел описывает привилегии, необходимые для операций, которые присваивают значения переменным системы во время выполнения. Это включает операции, влияющие на значения во время выполнения, и операции сохранения значений.

Для установки глобальной переменной системы используйте оператор SET с соответствующим ключевым словом. Эти привилегии применяются:

  • Для установки значения глобальной переменной системы во время выполнения, используйте оператор SET GLOBAL, который требует привилегии SYSTEM_VARIABLES_ADMIN (или устаревшей привилегии SUPER).

  • Для сохранения глобальной переменной системы в файл 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 нельзя использовать.

  • Некоторые глобальные переменные системы ограничены в отношении сохранения (см. Раздел 7.1.9.4, «Несохраняемые и ограниченные в сохранении переменные системы»). Для сохранения этих переменных используйте оператор SET PERSIST_ONLY, который требует указанных ранее привилегий. Кроме того, вы должны подключиться к серверу с использованием зашифрованного соединения и предоставить сертификат SSL с значением Subject, указанным в переменной системы persist_only_admin_x509_subject.

Для удаления сохранённой глобальной переменной системы из файла 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 и mandatory_roles, которые требуют дополнительных привилегий. Эти дополнительные привилегии применяются к операциям, устанавливающим глобальное значение во время выполнения, но не к операциям сохранения значения.

Для установки сессионного значения переменной системы во время выполнения используйте оператор SET SESSION. В отличие от установки глобальных значений во время выполнения, установка сессионных значений во время выполнения обычно не требует специальных привилегий и может быть выполнена любым пользователем для текущей сессии. Для некоторых переменных системы установка сессионного значения может иметь последствия за пределами текущей сессии, и поэтому является ограниченной операцией, которую могут выполнить только пользователи, имеющие специальную привилегию:

  • Требуемая привилегия — SESSION_VARIABLES_ADMIN.

    Примечание

    Любой пользователь, имеющий привилегию SYSTEM_VARIABLES_ADMIN или SUPER, фактически имеет привилегию SESSION_VARIABLES_ADMIN и не обязательно должен получить привилегию SESSION_VARIABLES_ADMIN явно.

Если сессионная переменная системы ограничена, это указывается в описании переменной. Примеры включают binlog_format и sql_log_bin. Установка сессионного значения этих переменных влияет на двоичное протоколирование для текущей сессии, но также может иметь более широкие последствия для целостности репликации и резервного копирования сервера.

SESSION_VARIABLES_ADMIN позволяет администраторам минимизировать потребность в привилегиях у пользователей, которым ранее могла быть предоставлена привилегия SYSTEM_VARIABLES_ADMIN или SUPER для изменения ограниченных сессионных переменных системы. Предположим, что администратор создал следующую роль для предоставления возможности установки ограниченных сессионных переменных системы:

CREATE ROLE set_session_sysvars;
GRANT SYSTEM_VARIABLES_ADMIN ON *.* TO set_session_sysvars;

Любой пользователь, которому предоставлена роль set_session_sysvars (и у которого эта роль активна), может устанавливать ограниченные сессионные переменные системы. Однако этот пользователь также может устанавливать глобальные переменные системы, что может быть нежелательно.

Изменив роль, чтобы она имела привилегию SESSION_VARIABLES_ADMIN вместо SYSTEM_VARIABLES_ADMIN, привилегии роли можно сократить до возможности установки ограниченных сессионных переменных системы и ничего больше. Для изменения роли используйте эти операторы:

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 напрямую, а не через роль.

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

Spec-Zone.ru

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