FIDO2 WebAuthN 仕様はモダンで広くサポートされ、どんどん便利になっている標準であり、我々はパスワードのない未来に近づいています。

MySQL は Enterprise Edition のバージョン 8.0 から、多要素認証をサポートしています。そして 8.2 では WebAuthN 認証のサポートが追加されました。

しかしこのサポートは主に、FIDO2 対応のハードウェア認証デバイス (Yubikey など) の利用を想定していました。これらはまったく問題なく、今でも最も安全なオプションではありますが、使い勝手に課題があります:

  • 物理的なハードウェア・キーが存在し、認証を要するデバイスと通信している必要があります。
  • ハードウェア・キーは紛失したり破損したりする可能性があります。
  • 特にバックアップを取ることが推奨されますが、その場合は特にコストがかかります。

業界が、ハードウェア・キーと同等のセキュリティ特性を持つ、ソフトウェア製の代替デバイスを見出そうとしているのは当然といえるでしょう。

パスキーの登場です。

パスキーは通常、OS 上に秘密鍵を保存し、生体認証で保護されます。最新の各 OS は近年、パスキーのサポートを強化しています。マイクロソフトは最近、Windows デバイスに Windows Hello の機能を追加しました。Windows Hello はパスキーの作成、保存、保護、API 利用を統一的にサポートしています。

そこで MySQL 9.1 では、WebAuthN プラグインを拡張して Windows Hello を有効な「セキュリティデバイス」としてサポートし、そこに保存されたパスキーを MySQL 認証に使えるようにしました。

Windows Hello でパスキーを作成し、それを mysql ユーザーアカウントの 2 番目の認証要素として使用するように設定する方法を、以下のビデオで紹介します:

続いて以下はどのように使うかです:

 

動画が苦手な人のためには、以下に Microsoft Windows の Windows Hello OS ストアに保存されているパスキーの設定と使用方法をステップバイステップで紹介します:

MySQL Server に必要なプラグインがあることを確認します:

mysql> SELECT PLUGIN_NAME, PLUGIN_STATUS
       FROM INFORMATION_SCHEMA.PLUGINS
       WHERE PLUGIN_NAME = 'authentication_webauthn';
+-------------------------+---------------+
| PLUGIN_NAME             | PLUGIN_STATUS |
+-------------------------+---------------+
| authentication_webauthn | ACTIVE        |
+-------------------------+---------------+

WebAuthN を使ってアカウントを作成します:

CREATE USER `u2`@`localhost` IDENTIFIED WITH caching_sha2_password BY ‘sha2_password’ AND IDENTIFIED WITH authentication_webauthn;

2 つ目の ログイン手段の登録: Windows Hello OS デバイスにパスキーを作成し、保存します:

mysql … –user=u2 –password1=sha2_password –register-factor=2

これで使えるようになりました。コントロールパネルで状態が確認できます (RP (Relying Party) IDとして “joro.mysql.com” を使っていることに注意) :

パスキーに関するシステム設定

パスキーを使ってログインします:

mysql –plugin-dir=c:\Users\gkodinov\dev\mysql-trunk\bld\plugin_output_directory -P 20202 –user=u2 –password1=sha2_password
mysql: [Warning] Using a password on the command line interface can be insecure.
Using device 0 Product=[Windows Hello] Manufacturer=[Microsoft Corporation]

Please insert FIDO device and perform gesture action for authentication to complete.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 13
Server version: 9.1.0-debug Source distribution

Copyright (c) 2000, 2024, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.

mysql>

以上で、MySQL Enterprise Edition でパスキー機能が追加されたことが確認できました。

注: パスキーは最初の認証方法としても使用できます。ただし、パスキーは最初に登録する必要があります。

create user u3 IDENTIFIED WITH authentication_webauthn INITIAL AUTHENTICATION IDENTIFIED BY 'foo';