2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Azure Database for MySQL での Azure AD 利用方法

Last updated at Posted at 2020-09-07

目的

Azure Database for MySQL (以下 Azure MySQL)で、
Azure Active Directory 認証によってログインする方法の整理。

Microsoft Docs を辿ってもフワッとした箇所が多く、手探りで確認する場面が多かったので備忘録。

手順の概略

Azure AD 管理者の操作

  1. Azure にログイン
  2. アクセストークンを取得
  3. Azure MySQL サーバーに接続
  4. Azure AD ユーザーを作成
  5. Azure AD ユーザーに権限を付与

Azure AD ユーザーの操作

  1. Azure にログイン
  2. アクセストークンを取得
  3. Azure MySQL サーバーに接続

準備物

Azure CLI

クロスプラットフォームのCLIツール。
Azure ポータルで操作が完結しないため、「az」コマンドの実行に必要。

MySQL Workbench (必要に応じて)

MySQL 公式のGUIツール。Azure MySQL サーバーへの接続用。

Azure AD 管理者

  • Azure ポータルで**「Active Directory 管理者」**として指定したユーザー

Azure AD ユーザー

  • Azure テナントに存在するユーザー

Azure AD 管理者の操作

1. Azure にログイン

*Azure CLI のインストール後
Windows Powershell 等で以下のコマンドを入力。

login.ps1
az login

Web ブラウザが立ち上がったら Azure で使用するアカウントを選択し、ログイン。

2. アクセストークンを取得

Azure MySQL サーバーに接続するためのアクセストークンを取得する。
これがパスワードの代わりになる。AD パスワードではない

以下のコマンドを入力。

get_token.ps1
az account get-access-token --resource-type oss-rdbms

以下のような JSON が返ってくる。

token.json
{
  "accessToken": "めちゃめちゃ長い文字列",
  "expiresOn": "...",
  "subscription": "...",
  "tenant": "...",
  "tokenType": "Bearer"
}

accessToken にある文字列をアクセストークンとして接続に使用する。
アクセストークンの有効期限は取得後の60分間
expiresOn にある時刻が有効期限。
有効期限が切れたら再度コマンドでトークンを取得し直さなきゃいけない。

3. Azure MySQL サーバーへの接続

MySQL Workbench を使用する場合

以下の情報を使用し、Azure MySQL サーバーに接続する。

項目名
Hostname サーバー名
(例: hogehogedb.mysql.database.azure.com)
Port 3306
Username Azure AD 管理者@サーバー
(例: AzureADadmin@yourdomain.com@hogehogedb)
Password 取得したアクセストークン

Advanced タブ下にある [Enable Cleartext Authentication Plugin] をオンにすること。

mysql.exe を使用する場合

mysql.exe を使って Azure MySQL サーバーに接続する場合は、以下のコマンドを実行。

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

4. Azure AD ユーザーを作成

そのままでは Azure AD 管理者以外のユーザーは Azure AD 認証でサーバーに接続できないため、
Azure AD でログインできるユーザーを作成する。

以下の SQL を実行。

create.sql
CREATE AADUSER 'piyo01@yourdomain.com';

5. Azure AD ユーザーに権限を付与

作成したユーザーはデフォルトでは権限を持たないため、権限を指定して付与。

以下の SQL を実行。(例)

grant.sql
GRANT
    SELECT, INSERT, UPDATE, DELETE
ON
    hogehogedb.*
TO
    'piyo01@yourdomain.com'@'%'
WITH GRANT OPTION;
FLUSH PRIVILEGES;

Azure AD ユーザーの操作

1. Azure にログイン

ユーザーが個別にログイン。

login.ps1
az login

2. アクセストークンを取得

ログイン後、ユーザーが個別にアクセストークンを取得。

get_token.ps1
az account get-access-token --resource-type oss-rdbms

3. Azure MySQL サーバーへの接続

各自の Azure AD ユーザー名と、個別で取得したアクセストークンを使い、
Azure MySQL サーバーに接続する。

項目名
Username Azure AD ユーザー@サーバー
(例: piyo01@yourdomain.com@hogehogedb)
Password 取得したアクセストークン

Azure AD 管理者が取得したアクセストークンとは別

まとめ

Azure AD の情報で Azure Database for MySQL サーバーにログインできるー

その他

* SQL Server や Azure SQL の行レベルセキュリティを再現したい場合は、Azure AD グループユーザーを作成し、DB/テーブル権限を与えて制御するしかなさそう

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?