8.4.1.11 Подключаемая аутентификация WebAuthn
Аутентификация WebAuthn — это расширение, включенное в MySQL Enterprise Edition, коммерческий продукт. Чтобы узнать больше о коммерческих продуктах, см. https://www.mysql.com/products/.
MySQL Enterprise Edition поддерживает метод аутентификации, который позволяет пользователям аутентифицироваться на MySQL Server с помощью аутентификации WebAuthn.
WebAuthn означает Web Authentication, веб-стандарт, опубликованный Консорциумом Всемирной паутины (W3C), и API веб-приложений, которые добавляют аутентификацию на основе FIDO в поддерживаемые браузеры и платформы.
Подключаемая аутентификация WebAuthn заменяет устаревшую подключаемую аутентификацию FIDO. Подключаемая аутентификация WebAuthn поддерживает устройства FIDO и FIDO2.
Подключаемая аутентификация WebAuthn предоставляет следующие возможности:
WebAuthn позволяет аутентифицироваться на MySQL Server с помощью устройств, таких как смарт-карты, защищённые ключи и биометрические считыватели.
Поскольку аутентификация может происходить не только путём ввода пароля, WebAuthn позволяет осуществлять аутентификацию без пароля.
С другой стороны, аутентификация устройства часто используется совместно с аутентификацией по паролю, поэтому аутентификация WebAuthn может быть эффективна для MySQL-аккаунтов, использующих многофакторную аутентификацию; см. Раздел 8.2.18, «Многофакторная аутентификация».
В следующей таблице показаны имена плагина и файла библиотеки. Название файла может отличаться на вашей системе. Общие суффиксы — .so для систем Unix и Unix-подобных систем и .dll для Windows. Файл должен находиться в каталоге, указанном переменной системы plugin_dir. Сведения об установке см. в разделе Установка подключаемой аутентификации WebAuthn.
Таблица 8.26 Названия плагинов и библиотек для аутентификации WebAuthn
| Плагин или файл | Имя плагина или файла |
|---|---|
| Плагин серверной части | authentication_webauthn |
| Плагин клиентской части | authentication_webauthn_client |
| Файл библиотеки |
authentication_webauthn.so, authentication_webauthn_client.so
|
Библиотека libfido2 должна быть доступна на системах, где используется плагин аутентификации WebAuthn серверной или клиентской части.
Плагин аутентификации WebAuthn серверной части включён только в MySQL Enterprise Edition. Он не включён в дистрибутивы MySQL Community. Плагин клиентской части включён во все дистрибутивы, включая Community, что позволяет клиентам из любого дистрибутива подключаться к серверу, на котором загружен плагин серверной части.
В следующих разделах приведена информация об установке и использовании, специфичная для подключаемой аутентификации WebAuthn:
Дополнительную информацию об аутентификации с помощью плагинов в MySQL см. в разделе 8.2.17, «Аутентификация с помощью плагинов».
Установка подключаемой аутентификации WebAuthn
В данном разделе описывается, как установить плагин аутентификации WebAuthn серверной части. Дополнительную информацию об установке плагинов см. в разделе Раздел 7.6.1, «Установка и удаление плагинов».
Для использования плагином сервера, файл библиотеки плагина должен находиться в каталоге плагинов MySQL (каталог, указанный переменной системы plugin_dir). При необходимости, настройте расположение каталога плагинов, задав значение plugin_dir при запуске сервера.
Базовое имя файла библиотеки плагина серверной части — authentication_webauthn. Суффикс имени файла отличается в зависимости от платформы (например, .so для систем Unix и Unix-подобных систем, .dll для Windows).
Перед установкой плагина серверной части определите уникальное имя для идентификатора стороны, доверяющей (используемого для регистрации и аутентификации устройства), которое является MySQL-сервером. Запустите сервер с опцией --loose-authentication-webauthn-rp-id=. В примере здесь указано значение valuemysql.com в качестве идентификатора стороны, доверяющей. Замените это значение на значение, соответствующее вашим требованиям.
$> mysqld [options] --loose-authentication-webauthn-rp-id=mysql.com
Для репликации используйте одинаковое значение authentication_webauthn_rp_id на всех узлах, если ожидается, что пользователь подключится к нескольким серверам.
Для определения стороны, доверяющей, и загрузки плагина при запуске сервера используйте опцию --plugin-load-add для указания имени файла библиотеки, содержащей плагин, корректируя суффикс .so в зависимости от вашей платформы. При таком методе загрузки плагина опция должна указываться каждый раз при запуске сервера.
$> mysqld [options]
--loose-authentication-webauthn-rp-id=mysql.com
--plugin-load-add=authentication_webauthn.so
Для определения стороны, доверяющей, и загрузки плагина поместите строки такого типа в свой файл my.cnf, корректируя суффикс .so в зависимости от вашей платформы:
[mysqld]
plugin-load-add=authentication_webauthn.so
authentication_webauthn_rp_id=mysql.com
После изменения файла my.cnf перезапустите сервер, чтобы новое значение вступило в силу.
В качестве альтернативы, для загрузки плагина во время выполнения используйте эту инструкцию, корректируя суффикс .so в зависимости от вашей платформы:
INSTALL PLUGIN authentication_webauthn
SONAME 'authentication_webauthn.so';
INSTALL PLUGIN загружает плагин немедленно и также регистрирует его в таблице системы mysql.plugins, что заставит сервер загружать его при каждом последующем нормальном запуске без необходимости в --plugin-load-add.
Для проверки установки плагина, просмотрите таблицу схемы информации PLUGINS или используйте инструкцию SHOW PLUGINS (см. Раздел 7.6.2, «Получение информации о плагинах сервера»). Например:
mysql> SELECT PLUGIN_NAME, PLUGIN_STATUS
FROM INFORMATION_SCHEMA.PLUGINS
WHERE PLUGIN_NAME = 'authentication_webauthn';
+-------------------------+---------------+
| PLUGIN_NAME | PLUGIN_STATUS |
+-------------------------+---------------+
| authentication_webauthn | ACTIVE |
+-------------------------+---------------+
Если плагин не удаётся инициализировать, проверьте журнал ошибок сервера на наличие диагностических сообщений.
Для связи MySQL-аккаунтов с плагином аутентификации WebAuthn см. Использование аутентификации WebAuthn.
Использование аутентификации WebAuthn
Аутентификация WebAuthn обычно используется в контексте многофакторной аутентификации (см. раздел 8.2.18, «Многофакторная аутентификация»). Этот раздел демонстрирует, как интегрировать аутентификацию WebAuthn на основе устройства в многофакторный аккаунт, используя плагин authentication_webauthn.
В последующем обсуждении предполагается, что сервер работает с включенным плагином серверной аутентификации WebAuthn, как описано в Установка плагина WebAuthn Pluggable Authentication, и что плагин WebAuthn на стороне клиента доступен в каталоге плагинов на хосте клиента.
В Windows аутентификация WebAuthn работает только в том случае, если процесс клиента выполняется пользователем с правами администратора. Также может потребоваться добавить местоположение вашего устройства FIDO/FIDO2 в переменную среды хоста клиента PATH.
Также предполагается, что аутентификация WebAuthn используется совместно с аутентификацией, не связанной с WebAuthn (что подразумевает учетную запись 2FA или 3FA). WebAuthn также может использоваться самостоятельно для создания учетных записей 1FA, которые проходят аутентификацию без пароля. В этом случае процесс настройки немного отличается. Инструкции см. в Беспарольной аутентификации WebAuthn.
Аккаунт, настроенный для использования плагина authentication_webauthn, связан с устройством Fast Identity Online (FIDO/FIDO2). По этой причине требуется одноразовая регистрация устройства, прежде чем сможет произойти аутентификация WebAuthn. Процесс регистрации устройства имеет следующие характеристики:
Любое устройство FIDO/FIDO2, связанное с аккаунтом, должно быть зарегистрировано, прежде чем аккаунт сможет быть использован.
Для регистрации требуется, чтобы устройство FIDO/FIDO2 было доступно на хосте клиента, в противном случае регистрация завершится неудачей.
От пользователя ожидается выполнение соответствующего действия устройства FIDO/FIDO2 при запросе во время регистрации (например, касание устройства или выполнение биометрического сканирования).
Для выполнения регистрации устройства пользователь должен вызвать программу клиента mysql и указать опцию
--register-factorдля указания фактора или факторов, для которых регистрируется устройство. Например, если аккаунт настроен на использование WebAuthn как второго фактора аутентификации, пользователь вызывает mysql с опцией--register-factor=2.Если учетная запись пользователя настроена с плагином
authentication_webauthn, установленным как второй или третий фактор, аутентификация для всех предыдущих факторов должна быть успешной, прежде чем можно будет перейти к шагу регистрации.Сервер знает из информации в учетной записи, требует ли устройство FIDO/FIDO2 регистрации или уже зарегистрировано. При подключении программы клиента сервер помещает сеанс клиента в режим песочницы, если устройство должно быть зарегистрировано, так что регистрация должна произойти, прежде чем что-либо еще сможет быть сделано. Режим песочницы, используемый для регистрации устройства FIDO/FIDO2, аналогичен режиму, используемому для обработки истекших паролей. См. раздел 8.2.16, «Обработка сервером истекших паролей».
В режиме песочницы разрешены только операторы, отличные от
ALTER USER. Регистрация выполняется с помощью форм этого оператора. При вызове с опцией--register-factor, клиент mysql генерирует операторыALTER USER, необходимые для выполнения регистрации. После завершения регистрации сервер выводит сеанс из режима песочницы, и клиент может продолжить работу в обычном режиме. Сведения об сгенерированных операторахALTER USERсм. в описании--register-factor.После выполнения регистрации устройства для аккаунта сервер обновляет строку в таблице системы
mysql.userдля этого аккаунта, чтобы обновить статус регистрации устройства и сохранить открытый ключ и идентификатор учетных данных. (Сервер не сохраняет идентификатор учетных данных после регистрации устройства FIDO2.)Шаг регистрации может быть выполнен только пользователем, указанным в аккаунте. Если один пользователь пытается выполнить регистрацию для другого пользователя, возникает ошибка.
Пользователь должен использовать то же самое устройство FIDO/FIDO2 во время регистрации и аутентификации. Если после регистрации устройства FIDO/FIDO2 на хосте клиента устройство сброшено или вставлено другое устройство, аутентификация завершается неудачно. В этом случае устройство, связанное с аккаунтом, должно быть аннулировано, и регистрация должна быть выполнена снова.
Предположим, что вы хотите, чтобы аккаунт сначала прошел аутентификацию с использованием плагина caching_sha2_password, а затем с использованием плагина authentication_webauthn. Создайте многофакторный аккаунт с помощью оператора такого вида:
CREATE USER 'u2'@'localhost'
IDENTIFIED WITH caching_sha2_password
BY 'sha2_password'
AND IDENTIFIED WITH authentication_webauthn;
Для подключения предоставьте пароль фактора 1 для успешной аутентификации по этому фактору и для инициирования регистрации устройства FIDO/FIDO2 установите значение опции --register-factor равным фактору 2.
$> mysql --user=u2 --password1 --register-factor=2
Enter password: (enter factor 1 password)
Please insert FIDO device and follow the instruction. Depending on the device,
you may have to perform gesture action multiple times.
1. Perform gesture action (Skip this step if you are prompted to enter device PIN).
2. Enter PIN for token device:
3. Perform gesture action for registration to complete.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
После того, как пароль фактора 1 будет принят, сеанс клиента перейдет в режим песочницы, чтобы можно было выполнить регистрацию устройства для фактора 2. Во время регистрации вам будет предложено выполнить соответствующее действие устройства FIDO/FIDO2, например, касание устройства или выполнение биометрического сканирования.
Дополнительно можно вызвать программу клиента mysql и указать опцию --plugin-authentication-webauthn-client-preserve-privacy. Если устройство FIDO2 содержит несколько обнаруживаемых учетных данных (постоянных ключей) для данного идентификатора отвечающей стороны (RP), эта опция позволяет выбрать ключ, который будет использоваться для утверждения. По умолчанию опция установлена в значение FALSE, что указывает на то, что утверждения должны создаваться, используя все постоянные ключи для данного идентификатора RP. При указании этой опции, mysql запросит у вас PIN-код устройства и отобразит все доступные учетные данные для данного идентификатора RP. Выберите один ключ и выполните оставшиеся онлайн-инструкции для завершения аутентификации. Здесь в качестве примера используется mysql.com в качестве допустимого идентификатора RP:
$> mysql --user=u2 --password1 --register-factor=2
--plugin-authentication-webauthn-client-preserve-privacy
Enter password: (enter factor 1 password)
Enter PIN for token device:
Found following credentials for RP ID: mysql.com
[1]`u2`@`127.0.0.1`
[2]`u2`@`%`
Please select one(1...N):
1
Please insert FIDO device and perform gesture action for authentication to complete.
+----------------+
| CURRENT_USER() |
+----------------+
| u2@127.0.0.1 |
+----------------+
Опция --plugin-authentication-webauthn-client-preserve-privacy не оказывает никакого влияния на устройства FIDO, которые не поддерживают функцию постоянного ключа.
После завершения процесса регистрации подключение к серверу разрешено.
Подключение к серверу разрешено после регистрации независимо от дополнительных факторов аутентификации в цепочке аутентификации учетной записи. Например, если учетная запись в приведенном выше примере была определена с третьим фактором аутентификации (с использованием аутентификации, не связанной с WebAuthn), подключение будет разрешено после успешной регистрации без аутентификации третьего фактора. Однако последующие подключения потребуют аутентификации всех трех факторов.
Беспарольная аутентификация WebAuthn
В данном разделе описывается, как WebAuthn может использоваться для создания учетных записей 1FA, которые проходят аутентификацию без пароля. В этом контексте «“беспарольная”» означает, что аутентификация выполняется, но использует метод, отличный от пароля, такой как ключ безопасности или биометрический скан. Это не относится к учетной записи, использующей плагин аутентификации на основе пароля, для которого пароль пуст. Такая «“беспарольная”» аутентификация абсолютно небезопасна и не рекомендуется.
Следующие предварительные условия применяются при использовании плагина authentication_webauthn для достижения беспарольной аутентификации:
Пользователь, создающий учетную запись с беспарольной аутентификацией, требует привилегии
PASSWORDLESS_USER_ADMINв дополнение к привилегииCREATE USER.-
Первый элемент значения
authentication_policyдолжен быть звездочкой (*), а не именем плагина. Например, значение по умолчаниюauthentication_policyподдерживает включение беспарольной аутентификации, поскольку первым элементом является звездочка:authentication_policy='*,,'
Дополнительную информацию о настройке значения
authentication_policyсм. в разделе Настройка политики многофакторной аутентификации.
Для использования authentication_webauthn в качестве беспарольного метода аутентификации учетная запись должна быть создана с authentication_webauthn в качестве первого метода аутентификации. Также должен быть указан пункт INITIAL
AUTHENTICATION IDENTIFIED BY для первого фактора (он не поддерживается для 2-го или 3-го факторов). Этот пункт определяет, будет ли использоваться случайный или заданный пользователем пароль для регистрации устройства FIDO/FIDO2. После регистрации устройства сервер удаляет пароль и изменяет учетную запись, чтобы сделать authentication_webauthn единственным методом аутентификации (метод 1FA).
Требуемый синтаксис для CREATE USER следующий:
CREATE USER user
IDENTIFIED WITH authentication_webauthn
INITIAL AUTHENTICATION IDENTIFIED BY {RANDOM PASSWORD | 'auth_string'};
В следующем примере используется синтаксис RANDOM
PASSWORD:
mysql> CREATE USER 'u1'@'localhost'
IDENTIFIED WITH authentication_webauthn
INITIAL AUTHENTICATION IDENTIFIED BY RANDOM PASSWORD;
+------+-----------+----------------------+-------------+
| user | host | generated password | auth_factor |
+------+-----------+----------------------+-------------+
| u1 | localhost | 9XHK]M{l2rnD;VXyHzeF | 1 |
+------+-----------+----------------------+-------------+
Для выполнения регистрации пользователь должен авторизоваться на сервере с паролем, связанным с пунктом INITIAL
AUTHENTICATION IDENTIFIED BY, либо со случайным сгенерированным паролем, либо со значением '. Если учетная запись была создана как показано выше, пользователь выполняет эту команду и вставляет ранее сгенерированный случайный пароль (auth_string'9XHK]M{l2rnD;VXyHzeF) в ответ на запрос:
$> mysql --user=u1 --password --register-factor=2
Enter password:
Please insert FIDO device and follow the instruction. Depending on the device,
you may have to perform gesture action multiple times.
1. Perform gesture action (Skip this step if you are prompted to enter device PIN).
2. Enter PIN for token device:
3. Perform gesture action for registration to complete.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 10
В качестве альтернативы, используйте опцию --plugin-authentication-webauthn-client-preserve-privacy для выбора обнаруживаемого идентификатора для аутентификации.
$> mysql --user=u1 --password --register-factor=2
--plugin-authentication-webauthn-client-preserve-privacy
Enter password:
Enter PIN for token device:
Found following credentials for RP ID: mysql.com
[1]`u1`@`127.0.0.1`
[2]`u1`@`%`
Please select one(1...N):
1
Please insert FIDO device and perform gesture action for authentication to complete.
+----------------+
| CURRENT_USER() |
+----------------+
| u1@127.0.0.1 |
+----------------+
Опция --register-factor=2 используется, потому что пункт INITIAL AUTHENTICATION IDENTIFIED
BY в настоящее время действует как первый метод аутентификации. Поэтому пользователь должен предоставить временный пароль, используя второй фактор. При успешной регистрации сервер удаляет временный пароль и пересматривает запись учетной записи в таблице системы mysql.user, чтобы указать authentication_webauthn как единственный (1FA) метод аутентификации.
При создании учетной записи с беспарольной аутентификацией важно включить пункт INITIAL AUTHENTICATION
IDENTIFIED BY в операторе CREATE USER. Сервер принимает оператор без пункта, но полученная учетная запись непригодна, потому что нет способа подключиться к серверу для регистрации устройства. Предположим, что вы выполнили оператор такого вида:
CREATE USER 'u2'@'localhost'
IDENTIFIED WITH authentication_webauthn;
Попытки подключения к учетной записи в дальнейшем завершаются ошибкой, как показано ниже:
$> mysql --user=u2 --skip-password
mysql: [Warning] Using a password on the command line can be insecure.
No FIDO device on client host.
ERROR 1 (HY000): Unknown MySQL error
Беспарольная аутентификация достигается с помощью протокола Universal 2nd Factor (U2F), который не поддерживает дополнительные меры безопасности, такие как установка ПИН-кода на регистрируемое устройство. Поэтому ответственность за обеспечение безопасного обращения с устройством лежит на владельце устройства.
Отключение устройств WebAuthn для MySQL
Возможна процедура отключения устройств FIDO/FIDO2, связанных с учетной записью MySQL. Это может быть желательно или необходимо в нескольких случаях:
-
Устройство FIDO/FIDO2 должно быть заменено другим устройством. Предыдущее устройство должно быть отключено, а новое — зарегистрировано.
В этом случае владелец учетной записи или любой пользователь, обладающий привилегией
CREATE USER, может отключить устройство. Владелец учетной записи может зарегистрировать новое устройство. -
Устройство FIDO/FIDO2 сброшено или утеряно. Попытки аутентификации будут неудачными до тех пор, пока текущее устройство не будет отключено, а новое — зарегистрировано.
В этом случае владелец учетной записи, неспособный пройти аутентификацию, не может отключить текущее устройство и должен обратиться к DBA (или любому пользователю с привилегией
CREATE USER), чтобы тот это сделал. Затем владелец учетной записи может повторно зарегистрировать сброшенное устройство или зарегистрировать новое.
Отключение устройства FIDO/FIDO2 может быть выполнено владельцем учетной записи или любым пользователем, обладающим привилегией CREATE
USER. Используйте следующий синтаксис:
ALTER USER user {2 | 3} FACTOR UNREGISTER;
Для повторной регистрации устройства или выполнения новой регистрации см. инструкции в разделе Использование аутентификации WebAuthn.
Как работает аутентификация WebAuthn MySQL-пользователей
Этот раздел предоставляет обзор того, как MySQL и WebAuthn взаимодействуют для аутентификации MySQL-пользователей. Примеры настройки MySQL-учетных записей для использования плагинов аутентификации WebAuthn см. в разделе Использование аутентификации WebAuthn.
Для учетной записи, использующей аутентификацию WebAuthn, необходимо выполнить первоначальную процедуру регистрации устройства, прежде чем можно будет подключиться к серверу. После регистрации устройства можно приступать к аутентификации. Процесс регистрации устройства WebAuthn следующий:
Сервер отправляет случайный вызов, идентификатор пользователя и идентификатор доверенной стороны (уникально идентифицирующий сервер) клиенту в формате JSON. Идентификатор доверенной стороны определяется переменной системы
authentication_webauthn_rp_id. Значение по умолчанию —mysql.com.Клиент получает эту информацию и отправляет ее клиентовому плагину аутентификации WebAuthn, который в свою очередь предоставляет ее устройству FIDO/FIDO2. Клиент также отправляет 1-байтовый признак, с установленным битом RESIDENT_KEYS для
ON(если это устройство FIDO2) илиOFF.После того, как пользователь выполнил соответствующее действие с устройством (например, прикоснулся к нему или выполнил биометрический скан), устройство FIDO/FIDO2 генерирует пару открытого/закрытого ключей, дескриптор ключа, сертификат X.509 и подпись, которая возвращается на сервер.
Плагин аутентификации WebAuthn на стороне сервера проверяет подпись. При успешной проверке сервер сохраняет идентификатор учетных данных (только для устройств FIDO) и открытый ключ в таблице системы
mysql.user.
После успешного завершения регистрации аутентификация WebAuthn проходит следующим образом:
Сервер отправляет случайный вызов, идентификатор пользователя, идентификатор доверенной стороны и учетные данные клиенту. Вызов преобразуется в URL-безопасный формат Base64.
Клиент отправляет ту же информацию на устройство. Клиент запрашивает у устройства, поддерживает ли оно протокол Client-to-Authenticator Protocols (CTAP2). Поддержка CTAP2 указывает, что устройство поддерживает протокол FIDO2.
-
Устройство FIDO/FIDO2 запрашивает у пользователя выполнение соответствующего действия, основанного на выбранном значении во время регистрации.
Если устройство поддерживает протокол FIDO2, устройство подписывает все доступные закрытые ключи на устройстве для данного идентификатора RP. При необходимости оно также может запросить у пользователя выбор одного из списка. Если устройство не поддерживает FIDO2, оно извлекает нужный закрытый ключ.
Это действие разблокирует закрытый ключ, и вызов подписывается.
Эта подписанная вызов возвращается на сервер.
Плагин аутентификации WebAuthn на стороне сервера проверяет подпись с помощью открытого ключа и отвечает, чтобы указать успех или неудачу аутентификации.
© 2025 Oracle
Licensed under the GPLv2 License.