MySQL で大規模なユーザとその認証情報を管理するのに苦労したことはないでしょうか。MySQL でこれを外部 ID プロバイダにアウトソーシングする方法を確認してみましょう。
OpenID Connect (OIDC) による認証を、MySQL 9.1 の Enterprise Edition でサポートしました。OpenID Connect (OIDC) はオープンスタンダードに基づいており、複数のアプリケーションでユーザ ID を統一するのに有用な技術です。
本記事では、OpenID Connect とは何か、なぜ MySQL にとって有益なのか、そして MySQL を用いたシステムでの実装の方法について掘り下げます。この例では、ID プロバイダとして Microsoft Azure を使用します。
OpenID Connect とは
概要
OpenID Connect は、OAuth 2.0 認証フレームワークの上に構築された認証プロトコルです。クライアント (ウェブアプリケーションやモバイルアプリなど) は、外部の認証サーバーによる認証を用いて、ユーザーのアイデンティティを確認できます。
OpenID Connect のメリット

主な利点:
- 便利で、管理が簡単で、安全で、可搬な認証
- 完全に標準化されたセットアップ
- 他の手段より簡単な実装、高い柔軟性
- OpenID 認証で MySQL 内の認証が可能 (詳細は後述)
- OpenIDは普及しており、多くの場合、組織は ADFS などのインフラを準備
- 多くの規制がデータがオンプレミスにあることを要求しているため、MySQL データベースはオンプレミスにあり、アプリケーションはクラウドにある構成が作れるのが大きな利点
- 複数のアプリケーションにまたがるSSOを実現することで、OIDC は認証プロセスを合理化
- OpenID プロバイダーで一度認証すれば、複数のサービスにアクセス可
- 複雑さを伴わずに Kerberos の利点を提供
- OpenID は、データセンターやクラウドをまたぐ接続を可能に
動作原理

-
ユーザー認証: ユーザーは、アイデンティティプロバイダーに登録されているアプリケーションに、自分のクレデンシャルを使用してログイン
-
ID トークンの交換: アプリケーションはアイデンティティプロバイダーに ID トークンをリクエストし、それをユーザーに提供、あるいはユーザーに代わって MySQL クライアントに直接転送
-
検証: MySQL Server は ID トークンを検証し、ユーザーを認証
-
アクセス: ID トークンに基づいて、MySQL Server はリソースへのアクセスを許可または拒否
MySQL における OpenID Connect の流れ

データベース管理者の設定作業
- authentication_openid_connect プラグインのインストール
OpenID Connect 認証用にサーバーを設定するには、管理者はサーバー側のプラグインをインストールする必要があります。authentication_openid_connect プラグインをインストールするには、 INSTALL PLUGIN 文を使用します。このときプラットフォームによっては、必要に応じて .so 接尾辞を加えます:

2. サポートされる ID プロバイダー、正式名称、公開署名キーの指定
管理者はシステム変数 authentication_openid_connect_configuration を用いて、アイデンティティプロバイダのリスト、正式名称、公開署名鍵を指定できます。Microsoft Azure の場合、これらの詳細はこちらでみつけられます。Microsoft Azure の openid 設定ページの “issuer” フィールドの値が、name フィールドに入る正式な発行者名です。必要な鍵 ID の公開署名鍵は、”jwks_uri” フィールドのリンク先にあります。この一連のデータセットに、”Azure” という名前をつけます (下記参照)。この名前は、ユーザーをマッピングする際にも同じものが使われます。

設定は以下のような形で、ファイルで指定することもできます:
SET GLOBAL authentication_openid_connect_configuration = "file://<absolute_path_to_file_location>";
3. MySQL のユーザーを外部ユーザーにマッピング
管理者は以下のように、MySQL ユーザーをアイデンティティプロバイダーで管理されている外部ユーザーにマッピングできます:

上の例で、”3nOXatqpWvCqv6LRSR5lmgtr5ewzfTPnoFamVOPrDeU" は Microsoft Azure ドメインでのユーザー識別子になります。
接続ユーザーのセットアップ
- ID トークンの取得
Azure から ID トークンを取得するには、いくつかの手段があります。この例では Azure CLI を使って、以下の手順で ID トークンを取得します:
- Microsoft の認証情報を使用してAzure Cloud Shell にログインします。
- Azure Cloud Shell が起動します:

- 以下のコマンドを実行し、Microsoft Entra ID の ID トークンを生成します:
az account get-access-token --resource <RESOURCE>

- Microsoft Entra ID の ID トークンは、フィールド “accessToken” の値ですので、コピーしてファイルに保存してください。
2. データベースへの接続
ユーザーは、以下のコマンドでデータベースに接続できます:

上記の中でファイル id_token には、Azure Cloud Shell を用いて生成した Microsoft Entra ID の ID トークンが含まれています。
まとめ
OpenID Connect の MySQL Enterprise Edition への統合により、データベース環境のセキュリティが強化されるだけでなく、ユーザ ID の管理プロセスが簡素化されるため、MySQL を Enterprise Edition にアップグレードする強い動機となり得ます。企業の分散システム採用が増加している今日では、OIDC のような標準化された認証機構の採用がますます重要になっています。MySQL は OIDC を活用することで、最新の認証ニーズに対応する堅牢でスケーラブルなソリューションを提供します。
新しいアプリケーションを構築する場合でも、既存のアプリケーションを拡張する場合でも、OpenID Connect を MySQL のセットアップに組み込むことは、よりセキュアでユーザーフレンドリーな認証エクスペリエンスの基本となります。
その他のリソース
- 認証に関する MySQL のドキュメント (英語)
- OpenID Connect のドキュメント (英語)
- Azure Active Directory B2C を用いた、標準的な OpenID Connect のサインイン、サインアップ機能の構築 (英語)
- Microsoft Entra ID (旧 Azure Active Directory) のトークンを Azure CLI で取得 (英語)
MySQL に OpenID Connect を実装することで、認証戦略が大幅に強化され、より安全でスケーラブル、そしてユーザーフレンドリーなアプリケーションへの道が開けます。
