落とし穴に立て札を立てるが如く

ハマりどころの解決が少しでも早くなることを願って書いていきます

Azure Active DirectoryのアカウントでSQL Databaseにログインしようの会

f:id:nam_yu_sql:20210212090906j:plain
この記事はcloud.config tech blogにもマルチポストしています。

tech-blog.cloud-config.jp

はじめに

DP-300の資格試験に完全勝利したなむゆです。
この資格はAzureのRDBサービス周りの各種機能について習熟していることを示す資格で、その試験勉強中に触った機能で面白かったものをピックアップしてみようということで一席打ちます。
ということで今回はSQL DatabaseにAzure Active Directoryのアカウントでログインできるようにしてみます。

Azure Active DirectoryのアカウントでSQL Databaseにログインできるようにする

まずはいつものようにSQL Databaseのリソースを作成します。
f:id:nam_yu_sql:20210212090937p:plain
リソースを作成したら忘れずに現在のIPからのアクセスを「サーバーファイアウォールの設定」から行っておきましょう。

設定できたら、次はSQL DatabaseのActive Directory管理者を設定します。
このユーザーはAzure Active Directoryに登録されているユーザーの中で最初にSQL Databaseにログインできるようにするユーザーで、そのユーザーを用いて他のActive Directoryに登録されたユーザーをSQL Databaseにログインできるようにできます。
f:id:nam_yu_sql:20210212091148p:plain
SQL Databaseのリソースの中の「Active Directory管理者」を選択します。
出てきた表示の上部に「管理者の追加」があるので、そこをクリックします。
f:id:nam_yu_sql:20210212091151p:plain
そうすると、現在使用しているActive Directoryのユーザーの一覧があるので、今回はあらかじめ作成しておいた「testtest」という名前のユーザーを登録しておきます。
このユーザーを選択し、「選択」ボタンをクリックして戻ります。
最後に「保存」をクリックして保存します。

これによって最初のActive DirectoryのユーザーがこのSQL Databaseにログインできるようになりました。
このユーザー情報でSQL Databaseにログインできることを確認しましょう。
ここからの作業はSSMS(SQL Server Management Studio)を使用しますのでまだインストールしていない場合はインストールしておきます。

SSMSを開き、データベースに接続します。ログイン時に「認証」の欄を「Azure Active Directory - パスワード」を選択します。
その下に先程追加したActive Directoryユーザーのユーザー名とパスワードを入力します。
ユーザー名はユーザープリンシパル名が全文必要なので、プロファイルのページから全文コピーしてきましょう。
f:id:nam_yu_sql:20210212091154p:plain
これでActive Directory管理者のユーザーでログインできたはずです。
次は、このユーザーを用いて他のAzure Active Directory上のユーザーを追加していきましょう。
接続したデータベースを右クリックして「新しいクエリ」を選択し、クエリエディタを呼び出します。
f:id:nam_yu_sql:20210212091144p:plain
そこに、以下のクエリを打ちこんで実行します。
{ユーザープリンシパル名}は実際に存在するユーザーのユーザープリンシパル名を置き換えて実行してください。

CREATE USER [{ユーザープリンシパル名}] FROM EXTERNAL PROVIDER  
GO  

これでもう一つのActive Directory上のユーザーがSQL Databaseに追加されました。
SSMSをもう一つ開き、そのユーザーのユーザー名とパスワードでログインしてみましょう。
ログインできるようになっているはずです。

このようにして、Azure SQL DatabaseにAzure Active Directory上のユーザーを用いてログインできるようにできます。
ただ、この状態だとActive Directory管理者が追加したユーザーは個別のデータベースには接続できず、何の権限も与えられていない状態なので個別に権限を与えてやる費用があります。

おわりに

今回はAzure SQL DatabaseにAzure Active Directoryのアカウントを用いてログインしてみました。
これができることによって、アプリケーションの開発者がSQL Databaseに対して毎回フル権限のある管理者アカウントでログインすることで事故を起こす可能性を減らし、また、それぞれのDBのユーザーの登録情報(例えばパスワード変えたりActive Directoryから削除したり)といった変更をActive Directoryへの変更だけで済ませることができます。
Azure SQL Databaseの利用者の権限について制約がある場合に検討することが多いトピックのように思うので、頭の隅に留めておくと役立つかと思います。

参考