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 в переменную среды client host’ 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 на клиентском хосте устройство сброшено или вставлено другое устройство, аутентификация завершится неудачей. В этом случае устройство, связанное с учётной записью, должно быть аннулировано, и регистрация должна быть выполнена заново.
-
MySQL 9.2 поддерживает аутентификацию Windows Hello. Серверный плагин доступен только с MySQL Enterprise Edition; клиентский плагин доступен с MySQL Enterprise Edition и MySQL Community Edition. Поддерживается Windows 11 и более поздние версии.
Клиентский плагин
authentication_webauthnиспользует библиотекуlibfido, которая поддерживает концепцию «устройства», которая может быть реализована как аппаратная (например, Yubikey) или как программная (например, хранилище ключей Windows Hello).libfidoиспользует такое устройство для связи с хранилищем ключей на стороне сервера и взаимодействия с ключами, которые хранятся в хранилище. Ключи физически не покидают хранилище на стороне сервера.Для указания устройства используйте опцию клиента mysql
--plugin-authentication-webauthn-device=#. По умолчанию используется первое устройство (0). Клиент выводит ошибку, если указанное устройство не существует. Это происходит, например, если есть только два устройства, а пользователь запрашивает третье. Клиент не выполняет никаких проверок наличия более активных устройств, чем необходимо.Клиентский плагин выводит имена продукта и производителя устройства перед взаимодействием с ним.
В настоящее время поддерживаются только ключи, хранящиеся в хранилище ключей Windows Hello; другие хранилища ключей, расположенные на других устройствах (возможно, доступные через Windows Hello путем сканирования QR-кода), не поддерживаются. Ключи, хранящиеся в модулях HSM или на Yubikeys, необходимо получить напрямую, а не использовать устройство Windows Hello.
Удаление сохранённых ключей из хранилища ключей Windows должно выполняться с помощью системных инструментов; клиент mysql не предоставляет способ удаления ключа.
Предположим, что вы хотите, чтобы учётная запись сначала прошла аутентификацию с использованием плагина 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
Возможно отключение устройств FIDO/FIDO2, связанных с учетной записью MySQL. Это может быть желательно или необходимо в нескольких ситуациях:
-
Устройство FIDO/FIDO2 необходимо заменить на другое. Предыдущее устройство должно быть отключено, а новое — зарегистрировано. В этом случае владелец учетной записи или любой пользователь, обладающий привилегией
CREATE USER, может отменить регистрацию устройства. Владелец учетной записи может зарегистрировать новое устройство. -
Устройство FIDO/FIDO2 сброшено или утеряно. Попытки аутентификации будут неудачными, пока текущее устройство не будет отключено и не будет выполнена новая регистрация. В этом случае владелец учетной записи, неспособный пройти аутентификацию, не может отменить регистрацию текущего устройства и должен обратиться к DBA (или любому пользователю, имеющему привилегию
CREATE USER) для этого. Затем владелец учетной записи может повторно зарегистрировать сброшенное устройство или зарегистрировать новое устройство.
Отменить регистрацию устройства FIDO/FIDO2 может владелец учетной записи или любой пользователь, имеющий привилегию CREATE
USER. Используйте следующий синтаксис:
ALTER USER user {2 | 3} FACTOR UNREGISTER;
Для повторной регистрации устройства или выполнения новой регистрации см. инструкции в разделе Использование аутентификации WebAuthn.
Как работает аутентификация MySQL-пользователей с помощью WebAuthn
В этом разделе приведены общие сведения о совместной работе 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, устройство подписывает все доступные закрытые ключи на устройстве для данного идентификатора доверенной стороны. По желанию, оно может также запросить у пользователя выбор из списка.
Если устройство не поддерживает FIDO2, оно извлекает нужный закрытый ключ.
Это действие разблокирует закрытый ключ, и запрос подписывается.
Эта подписанная проверка возвращается на сервер.
Плагин аутентификации WebAuthn на стороне сервера проверяет подпись с использованием открытого ключа и отвечает, чтобы указать успешность или неудачу аутентификации.
© 2025 Oracle
Licensed under the GPLv2 License.