MySQL での認証に Microsoft Entra ID を使用する

適用対象: Azure Database for MySQL - シングル サーバー

重要

Azure Database for MySQL の単一サーバーは提供終了パスにあります。 Azure Database for MySQL フレキシブル サーバーにアップグレードすることを強くお勧めします。 Azure Database for MySQL フレキシブル サーバーへの移行の詳細については、「Azure Database for MySQL 単一サーバーの動作」を参照してください

この記事では、Azure Database for MySQL を使用して Microsoft Entra ID アクセスを構成する方法と、Microsoft Entra ID トークンを使用して接続する方法について説明します。

重要

Microsoft Entra 認証は、MySQL 5.7 以降でのみ使用できます。

Microsoft Entra 管理者ユーザーの設定

Microsoft Entra ID ベースの認証用にユーザーを作成/有効化できるのは、Microsoft Entra 管理者ユーザーだけです。 Microsoft Entra 管理者ユーザーを作成するには、次の手順に従います

  1. Azure portal で、Microsoft Entra ID に対して有効にする Azure Database for MySQL のインスタンスを選択します。
  2. [設定] で、[Active Directory 管理者] を選択します。

set Microsoft Entra administrator

  1. 顧客テナントで有効な Microsoft Entra ユーザーを Microsoft Entra 管理者として選択します。

重要

管理者を設定すると、管理者の完全なアクセス許可を持つ新しいユーザーが Azure Database for MySQL サーバーに追加されます。

作成できる Microsoft Entra 管理者は、MySQL サーバーあたり 1 人だけです。別の管理者を選択すると、そのサーバーに構成されている既存の Microsoft Entra 管理者が上書きされます。

管理者を構成した後、サインインできるようになりました。

Microsoft Entra ID を使用して Azure Database for MySQL に接続する

次の概要図は、Azure Database for MySQL で Microsoft Entra 認証を使用するワークフローをまとめたものです。

authentication flow

Microsoft Entra 統合は、mysql CLI などの一般的な MySQL ツールと連携するように設計されています。これらのツールは Microsoft Entra 対応ではなく、MySQL に接続するときにユーザー名とパスワードを指定することのみをサポートしています。 上の図に示されているように、Microsoft Entra トークンをパスワードとして渡します。

現在、次のクライアントがテストされています。

  • MySQLWorkbench
  • MySQL CLI

また、よく使われるアプリケーション ドライバーもテストされています。詳細については、このページの最後を参照してください。

ユーザー/アプリケーションで Microsoft Entra ID を使用して認証を行う必要がある手順を次に示します。

前提条件

Azure Cloud Shell、Azure VM、またはお使いのローカル コンピューター上で、次の手順を実行できます。 Azure CLI がインストールされていることを確認します。

手順 1: Microsoft Entra ID を使用して認証する

最初に、Azure CLI ツールを使用して Microsoft Entra ID による認証を行います。 この手順は、Azure Cloud Shell では必要ありません。

az login

このコマンドを実行すると、ブラウザー ウィンドウが開き、Microsoft Entra 認証ページが表示されます。 Microsoft Entra のユーザー ID とパスワードを入力するように求められます。

手順 2: Microsoft Entra アクセス トークンを取得する

Azure CLI ツールを起動して、手順 1 で認証された Microsoft Entra ユーザーのアクセス トークンを取得し、Azure Database for MySQL にアクセスします。

例 (パブリック クラウドの場合):

az account get-access-token --resource https://ossrdbms-aad.database.windows.net

上記のリソース値は、示されているとおりに正確に指定する必要があります。 他のクラウドの場合、リソース値は次を使用して検索できます。

az cloud show

Azure CLI バージョン 2.0.71 以降では、すべてのクラウドに対して、次のより便利なバージョンでコマンドを指定できます。

az account get-access-token --resource-type oss-rdbms

PowerShell を使用して、次のコマンドを実行してアクセス トークンを取得できます。

$accessToken = Get-AzAccessToken -ResourceUrl https://ossrdbms-aad.database.windows.net
$accessToken.Token | out-file C:\temp\MySQLAccessToken.txt

認証が成功すると、Microsoft Entra ID は次のアクセス トークンを返します。

{
  "accessToken": "TOKEN",
  "expiresOn": "...",
  "subscription": "...",
  "tenant": "...",
  "tokenType": "Bearer"
}

トークンは、認証されたユーザーに関するすべての情報をエンコードする Base 64 文字列であり、Azure Database for MySQL サービスをターゲットとしています。

アクセス トークンが有効なのは、"5 分から 60 分" の間です。 アクセス トークンは、Azure Database for MySQL へのログインを開始する直前に取得することをお勧めします。 次の PowerShell コマンドを使用して、トークンの有効期限を確認できます。

$accessToken.ExpiresOn.DateTime

手順 3:MySQL でログインするためのパスワードとしてトークンを使用する

接続時には、MySQL ユーザー パスワードとしてアクセス トークンを使用する必要があります。 MySQLWorkbench などの GUI クライアントを使用する場合は、上記の方法を使用してトークンを取得できます。

MySQL CLI を使用する

CLI を使用する場合は、この短縮形を使用して接続できます。

例 (Linux/macOS):

mysql -h mydb.mysql.database.azure.com \ 
  --user user@tenant.onmicrosoft.com@mydb \ 
  --enable-cleartext-plugin \ 
  --password=`az account get-access-token --resource-type oss-rdbms --output tsv --query accessToken`

MySQL Workbench を使用する

  • MySQL Workbench を起動し、[データベース] オプションをクリックして、[データベースへの接続] をクリックします
  • ホスト名フィールドに、MySQL の FQDN を入力します。例: mydb.mysql.database.azure.com
  • ユーザー名フィールドに、MySQL Microsoft Entra の管理者名を入力して、FQDN ではなく MySQL サーバー名を追加します。例: user@tenant.onmicrosoft.com@mydb
  • パスワード フィールドで、[Store in Vault](コンテナーに保管) をクリックし、たとえば C:\temp\MySQLAccessToken.txt などのファイルのアクセス トークンを貼り付けます。
  • 詳細設定タブをクリックして、[Enable Cleartext Authentication Plugin](クリア テキスト認証プラグインを有効にする) に必ずチェックを付けます
  • [OK] をクリックしてデータベースに接続します

接続時の重要な考慮事項:

  • user@tenant.onmicrosoft.com は、接続に使用しようとしている Microsoft Entra ユーザーまたはグループの名前です
  • Microsoft Entra ユーザー/グループ名の後には常にサーバー名を付加してください (@mydb など)
  • Microsoft Entra ユーザーまたはグループの名前は正確なスペルで入力してください
  • Microsoft Entra ユーザーおよびグループの名前では、大文字と小文字が区別されます
  • グループとして接続する場合は、グループ名のみ (GroupName@mydb など) を使用します
  • 名前にスペースが含まれている場合は、各スペースの前に \ を使用してエスケープします

“enable-cleartext-plugin” 設定に注意してください。トークンがハッシュされずにサーバーに送信されるようにするには、他のクライアントと同様の構成を使用する必要があります。

これで、Microsoft Entra 認証を使用して MySQL サーバーに対して認証されました。

Azure Database for MySQL で Microsoft Entra ユーザーを作成する

Azure Database for MySQL データベースに Microsoft Entra ユーザーを追加するには、接続後に次の手順を実行します (接続方法については、後述のセクションを参照してください)。

  1. まず、Microsoft Entra ユーザー <user>@yourtenant.onmicrosoft.com が Microsoft Entra テナントの有効なユーザーであることを確認します。
  2. Microsoft Entra 管理者ユーザーとして Azure Database for MySQL インスタンスにサインインします。
  3. Azure Database for MySQL でユーザー <user>@yourtenant.onmicrosoft.com を作成します。

例:

CREATE AADUSER 'user1@yourtenant.onmicrosoft.com';

ユーザー名が 32 文字を超える場合は、接続時に使用するため、代わりに別名を使用することをお勧めします。

例:

CREATE AADUSER 'userWithLongName@yourtenant.onmicrosoft.com' as 'userDefinedShortName'; 

注意

  1. MySQL では先頭と末尾のスペースが無視されるため、ユーザー名の先頭または末尾にスペースを含めることはできません。
  2. Microsoft Entra ID を通じてユーザーを認証しても、Azure Database for MySQL データベース内のオブジェクトにアクセスするためのアクセス許可はユーザーに付与されません。 必要なアクセス許可をユーザーに手動で付与する必要があります。

Azure Database for MySQL で Microsoft Entra グループを作成する

Microsoft Entra グループがデータベースにアクセスできるようにするには、ユーザーの場合と同じメカニズムを使用しますが、代わりにグループ名を指定します。

例:

CREATE AADUSER 'Prod_DB_Readonly';

ログインするときに、グループのメンバーは自分の個人用アクセス トークンを使用しますが、ユーザー名として指定されたグループ名でサインインします。

トークンの検証

Azure Database for MySQL での Microsoft Entra 認証により、ユーザーが MySQL サーバーに存在することが保証され、トークンの内容を検証することによってトークンの有効性がチェックされます。 次のトークンの検証手順が実行されます。

  • トークンが Microsoft Entra ID によって署名されていて、改ざんされていないこと
  • トークンがサーバーに関連付けられているテナントの Microsoft Entra ID によって発行されたこと
  • トークンの有効期限が切れていないこと
  • トークンが (別の Azure リソースではなく) Azure Database for MySQL リソース用であること

アプリケーション ドライバーとの互換性

ほとんどのドライバーはサポートされていますが、パスワードをクリア テキストで送信する設定を使用して、トークンが変更されずに送信されるようにする必要があります。

  • C/C++
    • libmysqlclient:サポートされています
    • mysql-connector-c++:サポートされています
  • Java
    • Connector/J (mysql-connector-java):サポートされています。useSSL 設定を使用する必要があります
  • Python
    • Connector/Python:サポートされています
  • Ruby
    • mysql2:サポートされています
  • .NET
    • mysql-connector-net:サポートされています。mysql_clear_password 用のプラグインを追加する必要があります
    • mysql-net/MySqlConnector:サポートされています
  • Node.js
    • mysqljs:サポートされていません (修正プログラムなしでクリア テキストでトークンを送信しません)
    • node-mysql2:サポートされています
  • Perl
    • DBD::mysql:サポートされています
    • Net::MySQL:サポートされていません
  • Go
    • go-sql-driver:サポートされています。接続文字列に ?tls=true&allowCleartextPasswords=true を追加してください

次のステップ