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 管理者ユーザーを作成するには、次の手順に従います
- Azure portal で、Microsoft Entra ID に対して有効にする Azure Database for MySQL のインスタンスを選択します。
- [設定] で、[Active Directory 管理者] を選択します。
- 顧客テナントで有効な 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 認証を使用するワークフローをまとめたものです。
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 ユーザーを追加するには、接続後に次の手順を実行します (接続方法については、後述のセクションを参照してください)。
- まず、Microsoft Entra ユーザー
<user>@yourtenant.onmicrosoft.com
が Microsoft Entra テナントの有効なユーザーであることを確認します。 - Microsoft Entra 管理者ユーザーとして Azure Database for MySQL インスタンスにサインインします。
- Azure Database for MySQL でユーザー
<user>@yourtenant.onmicrosoft.com
を作成します。
例:
CREATE AADUSER 'user1@yourtenant.onmicrosoft.com';
ユーザー名が 32 文字を超える場合は、接続時に使用するため、代わりに別名を使用することをお勧めします。
例:
CREATE AADUSER 'userWithLongName@yourtenant.onmicrosoft.com' as 'userDefinedShortName';
注意
- MySQL では先頭と末尾のスペースが無視されるため、ユーザー名の先頭または末尾にスペースを含めることはできません。
- 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
設定を使用する必要があります
- Connector/J (mysql-connector-java):サポートされています。
- 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
を追加してください
- go-sql-driver:サポートされています。接続文字列に