Spec-Zone.ru › MySQL 9.2

8.4.1.2 Подключаемая аутентификация SHA-256

MySQL предоставляет два плагина аутентификации, которые реализуют хеширование SHA-256 для паролей учетных записей пользователей:

  • sha256_password: Реализует базовая аутентификация SHA-256.

  • caching_sha2_password: Реализует аутентификацию SHA-256 (как sha256_password), но использует кэширование на стороне сервера для повышения производительности и имеет дополнительные возможности для более широкой применимости.

В этом разделе описывается исходный плагин аутентификации SHA-2 без кэширования. Сведения о плагине с кэшированием см. в разделе 8.4.1.1 «Кэшируемая подключаемая аутентификация SHA-2».

Важно

В MySQL 9.2, caching_sha2_password является плагином аутентификации по умолчанию; mysql_native_password больше недоступен. Сведения о последствиях этого изменения для работы сервера и совместимости сервера с клиентами и подключениями см. в .

Поскольку caching_sha2_password является плагином аутентификации по умолчанию в MySQL 9.2 и предоставляет расширенный набор возможностей по сравнению с плагином аутентификации sha256_password, sha256_password устарел; ожидается, что он будет удален в будущих версиях MySQL. Учетные записи MySQL, которые используют аутентификацию sha256_password, следует переместить на использование caching_sha2_password.

Важно

Для подключения к серверу с помощью учетной записи, использующей плагин sha256_password, необходимо использовать либо подключение TLS, либо нешифрованное подключение, поддерживающее обмен паролями с использованием пары ключей RSA, как описано позже в этом разделе. В любом случае, плагин sha256_password использует возможности шифрования MySQL. См. раздел 8.3 «Использование шифрованных подключений».

Примечание

В названии sha256_password, “sha256” относится к длине дайджеста 256 бит, используемой плагином для шифрования. В названии caching_sha2_password, “sha2” относится более обобщенно к классу алгоритмов шифрования SHA-2, одним из примеров которого является шифрование длиной 256 бит. Последний выбор имени оставляет место для будущего расширения возможных длин дайджестов без изменения имени плагина.

В следующей таблице показаны имена плагинов на стороне сервера и на стороне клиента.

Таблица 8.15 Имена плагинов и библиотек для аутентификации SHA-256

Таблица 8.15 Имена плагинов и библиотек для аутентификации SHA-256
Плагин или файл Имя плагина или файла
Плагин на стороне сервера sha256_password
Плагин на стороне клиента sha256_password
Файл библиотеки Нет (плагины встроенные)

В следующих разделах приводится информация об установке и использовании, специфичная для подключаемой аутентификации SHA-256:

  • Установка подключаемой аутентификации SHA-256

  • Использование подключаемой аутентификации SHA-256

Для получения общей информации о подключаемой аутентификации в MySQL см. раздел 8.2.17 «Подключаемая аутентификация».

Установка подключаемой аутентификации SHA-256

Плагин sha256_password существует в форматах для сервера и клиента:

  • Плагин на стороне сервера встроен в сервер, его не нужно загружать явно и нельзя отключить, выгрузив его.

  • Плагин на стороне клиента встроен в библиотеку клиента libmysqlclient и доступен для любой программы, связанной с libmysqlclient.

END_OF_DOCUMENT_MARKER
Использование плагина аутентификации SHA-256

Для настройки учётной записи, использующей плагин sha256_password для хеширования паролей SHA-256, используйте следующее утверждение, где password — желаемый пароль учётной записи:

CREATE USER 'sha256user'@'localhost'
IDENTIFIED WITH sha256_password BY 'password';

Сервер назначает плагин sha256_password для учётной записи и использует его для шифрования пароля с помощью SHA-256, сохраняя эти значения в столбцах plugin и authentication_string таблицы системы mysql.user.

(Оператор IDENTIFIED WITH не нужен, если sha256_password — это плагин по умолчанию; это можно указать с помощью authentication_policy.)

sha256_password поддерживает подключения через защищённый транспорт. sha256_password также поддерживает обмен зашифрованными паролями с использованием RSA по незащищённым соединениям, если MySQL скомпилирован с использованием OpenSSL, и сервер MySQL, с которым вы хотите подключиться, настроен на поддержку RSA (используя процедуру конфигурации RSA, приведённую позднее в этом разделе).

Поддержка RSA имеет следующие характеристики:

  • На стороне сервера две переменные системы называют файлы закрытого и открытого ключей RSA: sha256_password_private_key_path и sha256_password_public_key_path. Администратор базы данных должен установить эти переменные при запуске сервера, если файлы ключей имеют имена, отличающиеся от значений по умолчанию переменных системы.

  • Сервер использует переменную системы sha256_password_auto_generate_rsa_keys, чтобы определить, нужно ли автоматически генерировать файлы пары ключей RSA. См. Раздел 8.3.3, «Создание сертификатов и ключей SSL и RSA».

  • Переменная состояния Rsa_public_key отображает значение открытого ключа RSA, используемого плагином аутентификации sha256_password.

  • Клиенты, которые владеют открытым ключом RSA, могут выполнить обмен паролями на основе пары ключей RSA с сервером во время процесса подключения, как описано позже.

  • Для подключений учётными записями, которые аутентифицируются с использованием sha256_password и обмена паролями на основе пары открытых и закрытых ключей RSA, сервер по мере необходимости отправляет открытый ключ RSA клиенту. Однако, если на хосте клиента доступна копия открытого ключа, клиент может использовать её, чтобы сократить количество запросов в протоколе клиент/сервер:

    • Для этих клиентов командной строки используйте опцию --server-public-key-path для указания файла открытого ключа RSA: mysql, mysqladmin, mysqlbinlog, mysqlcheck, mysqldump, mysqlimport, mysqlshow, mysqlslap, mysqltest.

    • Для программ, использующих API C, вызовите, чтобы указать файл открытого ключа RSA, передав опцию MYSQL_SERVER_PUBLIC_KEY и имя файла.

    • Для реплик используйте оператор CHANGE REPLICATION SOURCE TO с опцией SOURCE_PUBLIC_KEY_PATH для указания файла открытого ключа RSA. Для Group Replication переменная системы group_replication_recovery_get_public_key выполняет ту же функцию.

Для клиентов, использующих плагин sha256_password, пароли никогда не отображаются как открытый текст при подключении к серверу. Способ передачи паролей зависит от того, используется ли защищённое соединение или шифрование RSA:

  • Если соединение защищено, пара ключей RSA не нужна и не используется. Это относится к соединениям, зашифрованным с использованием TLS. Пароль передаётся как открытый текст, но его нельзя перехватить, потому что соединение защищено.

    Примечание

    В отличие от caching_sha2_password, плагин sha256_password не рассматривает подключения в общей памяти как защищённые, даже если транспорт в общей памяти по умолчанию защищён.

  • Если соединение не защищено и пара ключей RSA доступна, соединение остаётся незащищённым. Это относится к подключениям, не зашифрованным с использованием TLS. RSA используется только для обмена паролями между клиентом и сервером, чтобы предотвратить перехват пароля. Когда сервер получает зашифрованный пароль, он его расшифровывает. Для предотвращения повторных атак используется функция смешивания при шифровании.

  • Если защищённое соединение не используется и шифрование RSA недоступно, попытка подключения завершается ошибкой, потому что пароль нельзя отправить, не показав его как открытый текст.

Примечание

Чтобы использовать шифрование паролей RSA с sha256_password, клиент и сервер должны быть скомпилированы с использованием OpenSSL, а не только один из них.

Предполагая, что MySQL был скомпилирован с использованием OpenSSL, используйте следующую процедуру, чтобы включить использование пары ключей RSA для обмена паролями во время процесса подключения клиента:

  1. Создайте файлы пары ключей RSA, используя инструкции в Разделе 8.3.3, «Создание сертификатов и ключей SSL и RSA».

  2. Если файлы закрытого и открытого ключей находятся в каталоге данных и имеют имена private_key.pem и public_key.pem (значения по умолчанию переменных системы sha256_password_private_key_path и sha256_password_public_key_path), сервер автоматически использует их при запуске.

    В противном случае, чтобы явно указать имена файлов ключей, установите значения переменных системы в имена файлов ключей в файле параметров сервера. Если файлы находятся в каталоге данных сервера, вам не нужно указывать полные пути к ним:

    [mysqld]
    sha256_password_private_key_path=myprivkey.pem
    sha256_password_public_key_path=mypubkey.pem
    

    Если файлы ключей находятся не в каталоге данных, или для явного указания их расположения в значениях переменных системы, используйте полные пути:

    [mysqld]
    sha256_password_private_key_path=/usr/local/mysql/myprivkey.pem
    sha256_password_public_key_path=/usr/local/mysql/mypubkey.pem
    
  3. Перезапустите сервер, затем подключитесь к нему и проверьте значение переменной состояния Rsa_public_key. Отображаемое значение фактически отличается от показанного здесь, но должно быть непустым:

    mysql> SHOW STATUS LIKE 'Rsa_public_key'\G
    *************************** 1. row ***************************
    Variable_name: Rsa_public_key
            Value: -----BEGIN PUBLIC KEY-----
    MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDO9nRUDd+KvSZgY7cNBZMNpwX6
    MvE1PbJFXO7u18nJ9lwc99Du/E7lw6CVXw7VKrXPeHbVQUzGyUNkf45Nz/ckaaJa
    aLgJOBCIDmNVnyU54OT/1lcs2xiyfaDMe8fCJ64ZwTnKbY2gkt1IMjUAB5Ogd5kJ
    g8aV7EtKwyhHb0c30QIDAQAB
    -----END PUBLIC KEY-----
    

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

После настройки сервера с файлами ключей RSA учётные записи, которые аутентифицируются с помощью плагина sha256_password, могут использовать эти файлы ключей для подключения к серверу. Как упоминалось ранее, такие учётные записи могут использовать либо защищённое соединение (в этом случае RSA не используется), либо незащищённое соединение, которое выполняет обмен паролями с использованием RSA. Предположим, используется незащищённое соединение. Например:

$> mysql --ssl-mode=DISABLED -u sha256user -p
Enter password: password

Для этой попытки подключения sha256user сервер определяет, что sha256_password — это соответствующий плагин аутентификации и вызывает его (потому что этот плагин был указан во время CREATE USER). Плагин обнаруживает, что соединение не зашифровано и, следовательно, требует передачи пароля с использованием шифрования RSA. В этом случае плагин отправляет открытый ключ RSA клиенту, который использует его для шифрования пароля и возвращает результат на сервер. Плагин использует закрытый ключ RSA на стороне сервера для расшифровки пароля и принимает или отклоняет подключение в зависимости от того, правильный ли пароль.

Сервер отправляет открытый ключ RSA клиенту по мере необходимости. Однако, если у клиента есть файл, содержащий локальную копию открытого ключа RSA, требуемого сервером, он может указать этот файл с помощью опции --server-public-key-path:

$> mysql --ssl-mode=DISABLED -u sha256user -p --server-public-key-path=file_name
Enter password: password

Значение открытого ключа в файле, указанном в опции --server-public-key-path, должно совпадать со значением ключа в файле на стороне сервера, указанном в переменной системы sha256_password_public_key_path. Если файл ключа содержит действительное значение открытого ключа, но значение некорректно, возникает ошибка доступа запрещён. Если файл ключа не содержит действительного открытого ключа, программа клиента не может его использовать. В этом случае плагин sha256_password отправляет открытый ключ клиенту так, как если бы опция --server-public-key-path не была указана.

Пользователи клиентов могут получить открытый ключ RSA двумя способами:

  • Администратор базы данных может предоставить копию файла открытого ключа.

  • Пользователь клиента, который может подключиться к серверу другим способом, может использовать оператор SHOW STATUS LIKE 'Rsa_public_key' и сохранить возвращённое значение ключа в файле.

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-9.2-en/sha256-pluggable-authentication.html

Spec-Zone.ru

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