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