このエントリは2022/10/05現在の情報に基づいています。将来の機能追加や変更に伴い、記載内容との乖離が発生する可能性があります。
先日、MySQL/PostgreSQL/SQL DatabaseへのJDBC/Spring Data JDBC/JPA接続でパスワードレス認証 (Azure AD認証) がPublic Previewで利用できるようになった(SQL Databaseへの素のJDBC接続のパスワードレス認証は2022/10/05現在未リリース)。
Delete Passwords: Passwordless Connections for Java Apps to Azure Services
https://techcommunity.microsoft.com/t5/apps-on-azure-blog/delete-passwords-passwordless-connections-for-java-apps-to-azure/ba-p/3638714
Azure サービスのパスワードレス接続 / Passwordless connections for Azure services
https://learn.microsoft.com/azure/developer/intro/passwordless-overview
以下のチュートリアルに従えば試すことは可能だが、一部ハマるところがあるので備忘録として記載しておく。
クイックスタート: Azure Database for MySQL で Java と JDBC を使用する / Quickstart: Use Java and JDBC with Azure Database for MySQL
https://learn.microsoft.com/azure/mysql/single-server/connect-java?tabs=passwordless
このエントリではチュートリアルと異なり、Azure Database for MySQL Flexible Serverを使って確認している。Flexible Serverの手順は以下にある(が2022/10/05現在パスワードレス認証の項目がないので、上記URLと両方見て設定を確認する必要がある)。
Azure Database for MySQL フレキシブル サーバーで Java と JDBC を使用する / Use Java and JDBC with Azure Database for MySQL Flexible Server
https://learn.microsoft.com/azure/mysql/flexible-server/connect-java
チュートリアル上は、JDK 8を使うよう指示が出ているが、JDK 19でも動作したことは記載しておく。
はまりどころやメモ
Managed Identityへのロール付与
Azure AD認証を利用するためには、Managed identityにAzure ADロール (Directory Readers) を付与する必要がある。手法は以下の2個だが、必要なAzure ADのSKUが違うので注意。
手法 | Azure ADのSKU |
---|---|
Managed Identityに直接ロールを付与 | 任意のAzure AD SKU (AD Freeでも可) |
Managed Identityをグループに入れ、そのグループにロールを付与 | Azure AD P1もしくはP2 https://learn.microsoft.com/azure/active-directory/roles/groups-assign-role |

MySQL Flexible Serverに割り当てたUser assigned managed identityに一致させる必要があるか?
上記のAzure ADロールを割り当てるManaged Identityは、MySQL Flexible Serverに割り当てたUser assigned managed identityと一致する必要がある。セキュリティ > 認証(プレビュー)を辿ると、下図のような表示を確認できる。この中に以下の記載がある。
Adding Azure AD admins requires an Identity to added to Azure Database for MySQL – Flexible Server. The Identity requires the following privileges – User.Read.All, GroupMember.Read.All and Application.Read.ALL to be granted. (Azure AD 管理者を追加するには、MySQL – フレキシブル サーバーの Azure Database に追加する ID が必要です。ID には、User.Read.All、GroupMember.Read.All、Application.Read.ALL の特権を許可する必要があります。)
つまり、user assigned managed identityはセキュリティ > IDで設定したものと同じでなければならない。

application.properties
IDEによっては、user=…の記述部分が使われていない、という表示が出るかもしれないが、当然ながらuserを指定していないとアクセスできないので、IDEの警告は無視すること。