Spec-Zone.ru › MySQL 8.4

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

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

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

  • sha256_password (устарел): Реализует базовые аутентификацию SHA-256.

В этом разделе описывается оригинальный плагин аутентификации SHA-2 без кэширования. Сведения о плагине с кэшированием см. в Разделе 8.4.1.2, «Caching SHA-2 Pluggable Authentication».

Важно

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

Поскольку caching_sha2_password является плагином аутентификации по умолчанию в MySQL 8.4 и предоставляет расширенный набор возможностей по сравнению с плагином аутентификации 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.16 Имена плагинов и библиотек для аутентификации SHA-256

Таблица 8.16 Имена плагинов и библиотек для аутентификации 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.

    • Для программ, использующих C API, вызовите, чтобы указать файл открытого ключа 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-8.4-en/sha256-pluggable-authentication.html

Spec-Zone.ru

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