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
| Плагин или файл | Название плагина или файла |
|---|---|
| Плагин на стороне сервера | sha256_password |
| Плагин на стороне клиента | sha256_password |
| Файл библиотеки | Нет (плагины встроенные) |
В следующих разделах приводится информация об установке и использовании, специфичная для подключаемой аутентификации SHA-256:
Для общей информации о подключаемой аутентификации в MySQL см. Раздел 8.2.17, «Подключаемая аутентификация».
Установка подключаемой аутентификации SHA-256
Плагин sha256_password (устарел) существует в форматах для сервера и клиента:
Плагин на стороне сервера встроен в сервер, не требует явного загрузки и не может быть отключен путем разгрузки.
Плагин на стороне клиента встроен в библиотеку клиента
libmysqlclientи доступен для любой программы, связанной сlibmysqlclient.
Использование плагина 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 для обмена паролем во время процесса подключения клиента:
Создайте файлы пары ключей RSA, используя инструкции в Разделе 8.3.3, «Создание SSL- и RSA-сертификатов и ключей».
-
Если файлы закрытого и открытого ключей находятся в каталоге данных и называются
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
-
Перезапустите сервер, затем подключитесь к нему и проверьте значение переменной статуса
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.