6.4.1.5 SHA-256 Подключаемый модуль аутентификации
MySQL предоставляет два подключаемых модуля аутентификации, которые реализуют хеширование SHA-256 для паролей учетных записей пользователей:
sha256_password: Реализует базовая аутентификация SHA-256.caching_sha2_password: Реализует аутентификацию SHA-256 (какsha256_password), но использует кэширование на стороне сервера для повышения производительности и имеет дополнительные возможности для более широкого применения.
В этом разделе описывается исходный подключаемый модуль аутентификации SHA-2 без кэширования. Для получения информации о подключаемом модуле с кэшированием см. раздел 6.4.1.4, «Caching SHA-2 Подключаемый модуль аутентификации».
Для подключения к серверу с помощью учетной записи, которая проходит аутентификацию с помощью подключаемого модуля sha256_password, необходимо использовать либо подключение TLS, либо нешифрованное подключение, поддерживающее обмен паролями с помощью пары ключей RSA, как описано позднее в этом разделе. В любом случае, подключаемый модуль sha256_password использует возможности шифрования MySQL. См. раздел 6.3, «Использование шифрованных подключений».
В названии sha256_password, “sha256” относится к длине дайджеста в 256 бит, которую использует модуль для шифрования. В названии caching_sha2_password, “sha2” относится более обще к классу алгоритмов шифрования SHA-2, одним из которых является 256-битное шифрование. Такой выбор названия позволяет в будущем расширять возможные длины дайджестов без изменения имени модуля.
В следующей таблице показаны имена подключаемых модулей на стороне сервера и клиента.
Таблица 6.11 Имена подключаемых модулей и библиотек для аутентификации SHA-256
| Подключаемый модуль или файл | Имя подключаемого модуля или файла |
|---|---|
| Подключаемый модуль на стороне сервера | sha256_password |
| Подключаемый модуль на стороне клиента | sha256_password |
| Файл библиотеки | Нет (подключаемые модули встроенные) |
В следующих разделах приводится информация об установке и использовании, специфичная для подключаемого модуля аутентификации SHA-256:
Для получения общей информации о подключаемых модулях аутентификации в MySQL см. раздел 6.2.13, «Подключаемые модули аутентификации».
Установка подключаемого модуля аутентификации 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.
В предыдущих инструкциях не предполагается, что плагин sha256_password является стандартным плагином аутентификации. Если плагин sha256_password является стандартным плагином аутентификации, можно использовать более простую синтаксис CREATE USER.
Для запуска сервера со стандартным плагином аутентификации, установленным на sha256_password, добавьте эти строки в файл опций сервера:
[mysqld]
default_authentication_plugin=sha256_password
Это приведет к тому, что плагин sha256_password будет использоваться по умолчанию для новых учетных записей. В результате, можно создать учетную запись и установить её пароль, не называя плагин явно:
CREATE USER 'sha256user'@'localhost' IDENTIFIED BY 'password';
Другим следствием установки default_authentication_plugin на sha256_password является то, что для использования другого плагина для создания учетной записи необходимо явно указать этот плагин. Например, для использования плагина mysql_native_password используйте следующую команду:
CREATE USER 'nativeuser'@'localhost'
IDENTIFIED WITH mysql_native_password BY 'password';
sha256_password поддерживает подключения через безопасный транспорт. sha256_password также поддерживает обмен зашифрованными паролями с использованием RSA по незащищенным подключениям, если выполнены следующие условия:
-
MySQL скомпилирован с использованием OpenSSL, а не yaSSL.
sha256_passwordработает с дистрибутивами, скомпилированными с использованием любого из пакетов, но поддержка RSA требует OpenSSL.ПримечаниеВозможно скомпилировать MySQL с использованием yaSSL как альтернативы OpenSSL только до версии MySQL 5.7.28. Начиная с MySQL 5.7.28, поддержка yaSSL удалена, и все сборки MySQL используют OpenSSL.
Сервер MySQL, к которому вы хотите подключиться, настроен на поддержку RSA (используя процедуру конфигурации RSA, описанную далее в этом разделе).
Поддержка RSA обладает следующими характеристиками:
На стороне сервера две системные переменные указывают на файлы с закрытым и открытым ключами RSA:
sha256_password_private_key_pathиsha256_password_public_key_path. Администратор базы данных должен установить эти переменные при запуске сервера, если используемые файлы ключей имеют имена, отличные от значений по умолчанию системных переменных.Сервер использует системную переменную
sha256_password_auto_generate_rsa_keys, чтобы определить, нужно ли автоматически генерировать файлы пар ключей RSA. См. Раздел 6.3.3, «Создание сертификатов и ключей SSL и RSA».Переменная состояния
Rsa_public_keyотображает значение открытого ключа RSA, используемого плагином аутентификацииsha256_password.Клиенты, обладающие открытым ключом RSA, могут выполнять обмен паролями на основе пар ключей RSA с сервером во время процесса подключения, как описано ниже.
-
Для подключений учетными записями, которые проходят аутентификацию с использованием
sha256_passwordи обменом паролями на основе пар открытых и закрытых ключей RSA, сервер посылает открытый ключ RSA клиенту при необходимости. Однако, если копия открытого ключа доступна на хосте клиента, клиент может использовать её, чтобы сэкономить раунд в протоколе клиент/сервер:Для этих командных клиентов используйте параметр
--server-public-key-path, чтобы указать файл с открытым ключом RSA: mysql, mysqltest, и (начиная с MySQL 5.7.23) mysqladmin, mysqlbinlog, mysqlcheck, mysqldump, mysqlimport, mysqlpump, mysqlshow, mysqlslap, mysqltest.Для программ, использующих C API, вызовите функцию, чтобы указать файл с открытым ключом RSA, передав параметр
MYSQL_SERVER_PUBLIC_KEYи имя файла.Для реплик, обмен паролями на основе пар ключей RSA не может использоваться для подключения к источникам серверов для учетных записей, которые проходят аутентификацию с использованием плагина
sha256_password. Для таких учетных записей можно использовать только безопасные подключения.
Для клиентов, использующих плагин sha256_password, пароли никогда не передаются в открытом виде при подключении к серверу. Способ передачи паролей зависит от того, используется ли безопасное соединение или шифрование RSA:
-
Если подключение защищено, пара ключей RSA не нужна и не используется. Это относится к подключениям, зашифрованным с помощью TLS. Пароль отправляется в открытом виде, но его нельзя перехватить, так как подключение защищено.
ПримечаниеВ отличие от
caching_sha2_password, плагинsha256_passwordне рассматривает подключения через общую память как безопасные, даже если транспорт через общую память по умолчанию защищен. Если подключение не защищено и пара ключей RSA доступна, подключение остается незащищенным. Это относится к подключениям, не зашифрованным с помощью TLS. RSA используется только для обмена паролями между клиентом и сервером, чтобы предотвратить перехват пароля. Когда сервер получает зашифрованный пароль, он его расшифровывает. В шифровании используется кодирование, чтобы предотвратить повторные атаки.
Если не используется защищенное подключение и шифрование RSA недоступно, попытка подключения завершается ошибкой, поскольку пароль не может быть отправлен без раскрытия в открытом виде.
Как упоминалось ранее, шифрование паролей RSA доступно только если MySQL скомпилирован с использованием OpenSSL. Следствием для дистрибутивов MySQL, скомпилированных с использованием yaSSL, является то, что для использования паролей SHA-256 клиенты должны использовать защищенное подключение для доступа к серверу. См. Раздел 6.3.1, «Настройка MySQL для использования защищенных подключений».
Для использования шифрования паролей RSA с sha256_password, клиент и сервер должны быть оба скомпилированы с использованием OpenSSL, а не только один из них.
Предполагая, что MySQL скомпилирован с использованием OpenSSL, следуйте процедуре для включения использования пары ключей RSA для обмена паролями во время подключения клиента:
Создайте файлы закрытого и открытого ключей RSA, используя инструкции в Разделе 6.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.