カテゴリ: Azure 更新日: 2026/05/21

Azure SQL Databaseの認証設定を徹底解説!Entra ID(旧Azure AD)統合でセキュアなデータベース管理を実現する方法

Azure SQLの認証設定|Azure AD(Entra ID)統合によるセキュアな管理
Azure SQLの認証設定|Azure AD(Entra ID)統合によるセキュアな管理

先生と生徒の会話形式で理解しよう

生徒

「Azure SQL Databaseのセキュリティを強化したいのですが、IDとパスワードの管理が大変です。何か良い方法はありますか?」

先生

「それならMicrosoft Entra ID(エントラ アイディー)、旧称Azure AD(アジュール エーディー)を使った統合認証がおすすめですよ。」

生徒

「Entra IDを使うと何が変わるんですか?」

先生

「個別のパスワード管理が不要になり、一元化された安全なアクセス制御が可能になります。具体的な設定方法を学んでいきましょう!」

1. Azure SQL Databaseの認証方式とは?

1. Azure SQL Databaseの認証方式とは?
1. Azure SQL Databaseの認証方式とは?

Azure SQL Database(アジュール エスキューエル データベース)を利用する際、データベースに「誰がアクセスして良いか」を確認する仕組みを認証(にんしょう)と呼びます。従来は「SQL認証」という、ユーザー名とパスワードをデータベースごとに作成する方法が一般的でした。しかし、この方法ではユーザーが増えるたびにパスワードを管理する手間が発生し、セキュリティリスクも高まります。

そこで推奨されるのが、Microsoft Entra ID(マイクロソフト エントラ アイディー)を利用した認証です。これは、組織のユーザーアカウントを一括管理する仕組みをデータベースと連携させるもので、シングルサインオン(SSO)のような便利な環境を構築できます。現代のクラウド運用においては、この「ID統合(アイディーとうごう)」が標準的な手法となっています。

2. Microsoft Entra ID統合のメリット

2. Microsoft Entra ID統合のメリット
2. Microsoft Entra ID統合のメリット

なぜ多くの企業がEntra ID(旧Azure AD)を選択するのでしょうか。最大の理由は「IDの一元管理(いちげんかんり)」にあります。社員が入社したり退社したりした際、Entra ID側のアカウントを無効にするだけで、自動的にSQL Databaseへのアクセス権も停止させることができます。これにより、削除し忘れた古いアカウントが悪用されるリスクを防げます。

また、多要素認証(MFA:たようそにんしょう)を組み合わせることで、パスワードだけでなくスマートフォンのアプリ承認などを追加し、より強固なセキュリティを担保できます。さらに、マネージドIDという機能を使えば、アプリケーションのコード内にパスワード(接続文字列)を記述せずにデータベースへ接続できるようになります。これは開発者にとって非常に大きなメリットです。

3. Entra ID管理者の設定手順

3. Entra ID管理者の設定手順
3. Entra ID管理者の設定手順

Azure SQL DatabaseでEntra ID認証を有効にするためには、まず「Microsoft Entra 管理者」を指定する必要があります。AzureポータルからSQL Serverのリソースを選択し、左側のメニューにある「Microsoft Entra ID」をクリックします。ここで「管理者の設定」を選択し、特定のユーザーやグループを管理者として登録します。

管理者に設定されたユーザーは、データベースに対して全権限を持つことになります。通常は個人のユーザーではなく、運用チームの「グループ」を指定することが推奨されます。これにより、担当者が変わってもグループのメンバーを入れ替えるだけで運用を継続できるからです。設定を保存すると、そのサーバー上のすべてのデータベースに対して、Entra IDベースのアクセスが可能になります。

4. データベースユーザーの作成と権限付与

4. データベースユーザーの作成と権限付与
4. データベースユーザーの作成と権限付与

管理者設定が終わったら、次は一般ユーザーがログインできるようにデータベース内でユーザーを作成します。SQL認証とは異なり、SQL文を使ってEntra IDのユーザーをデータベースに関連付けます。この操作は、先ほど設定した「Microsoft Entra 管理者」のアカウントで行う必要があります。

以下の手順では、まず現在のユーザーを確認し、その後に新しいEntra IDユーザーを追加する流れを解説します。これにより、特定のユーザーだけに「データの読み取り権限」を与えるといった細かな制御が可能になります。


id | user_name          | role          | department
---+--------------------+---------------+-----------
1  | admin_user         | db_owner      | IT_Dept
2  | dev_user_01        | db_datareader | Dev_Team
3  | analyst_01         | db_datareader | Sales_Div
4  | manager_01         | db_datawriter | Sales_Div

-- Entra IDのユーザーを外部プロバイダーから作成
CREATE USER [user@example.com] FROM EXTERNAL PROVIDER;

-- 読み取り専用権限(db_datareader)を付与
ALTER ROLE db_datareader ADD MEMBER [user@example.com];

id | user_name          | role          | department
---+--------------------+---------------+-----------
1  | admin_user         | db_owner      | IT_Dept
2  | dev_user_01        | db_datareader | Dev_Team
3  | analyst_01         | db_datareader | Sales_Div
4  | manager_01         | db_datawriter | Sales_Div
5  | user@example.com   | db_datareader | Marketing

5. C#アプリケーションからのセキュアな接続

5. C#アプリケーションからのセキュアな接続
5. C#アプリケーションからのセキュアな接続

Entra ID認証を利用する場合、C#(シーシャープ)のプログラムからもパスワードレスで接続できます。Microsoft.Data.SqlClientライブラリを使用すると、「Active Directory Default」という認証モードを指定するだけで、現在ログインしているユーザー情報を使って自動的に認証が行われます。

この方法を使うと、接続文字列(ConnectionString)の中にパスワードを直接書き込む必要がありません。ソースコードをGitHub(ギットハブ)などの共有リポジトリにアップロードしても、認証情報が漏洩(ろうえい)する心配がないため、開発現場では非常に重宝されています。それでは、実際のコード例を見てみましょう。


using Microsoft.Data.SqlClient;

// 接続文字列に Authentication=Active Directory Default を指定
string connectionString = "Server=tcp:yourserver.database.windows.net,1433;Initial Catalog=yourdb;Authentication=Active Directory Default;Encrypt=True;";

using (SqlConnection connection = new SqlConnection(connectionString))
{
    try
    {
        connection.Open();
        Console.WriteLine("Azure Entra ID認証で接続に成功しました!");
    }
    catch (Exception ex)
    {
        Console.WriteLine($"エラーが発生しました: {ex.Message}");
    }
}

Azure Entra ID認証で接続に成功しました!

6. コマンドラインによる接続確認

6. コマンドラインによる接続確認
6. コマンドラインによる接続確認

設定が正しいかどうかを確認するために、Azure CLI(アジュール シーエルアイ)やsqlcmd(エスキューエルコマンド)というツールを使うこともできます。開発環境の端末からコマンドを打ち込むだけで、即座にデータベースの状態を確認できるため、トラブルシューティングに役立ちます。

特にLinux(リナックス)環境やMacからAzure SQL Databaseを操作する場合、これらのコマンドラインツールは必須となります。まずはAzureにログインし、その後にトークンを利用してデータベースへアクセスする流れが一般的です。実際の実行例を以下に示します。


az login
[
  {
    "cloudName": "AzureCloud",
    "id": "xxxx-xxxx-xxxx",
    "isDefault": true,
    "name": "MySubscription",
    "state": "Enabled",
    "tenantId": "yyyy-yyyy-yyyy",
    "user": {
      "name": "user@example.com",
      "type": "user"
    }
  }
]

sqlcmd -S yourserver.database.windows.net -d yourdb -G
1> SELECT TOP 1 name FROM sys.databases;
2> GO
name
--------------------------------------------------------------------------------------------------------------------------------
yourdb

(1 rows affected)

7. セキュリティをさらに高めるための注意点

7. セキュリティをさらに高めるための注意点
7. セキュリティをさらに高めるための注意点

Entra ID認証を導入しても、ファイアウォールの設定を疎かにしてはいけません。Azure SQL Databaseには、どのIPアドレス(アイピーアドレス)からの通信を許可するかという「サーバーファイアウォール」の設定があります。基本的には、必要な端末のIPアドレスのみを許可する「最小権限の原則(さいしょうけんげんのげんそく)」を守りましょう。

また、Azure内で動くアプリからの接続であれば、「Azureサービスおよびリソースにこのサーバーへのアクセスを許可する」というオプションを有効にすることで、インターネットを経由せずに接続できる設定も可能です。これに加えて、プライベートリンクという機能を使えば、完全に閉じたネットワーク内だけでデータベース通信を完結させることもできます。

8. 運用でよくあるトラブルと解決策

8. 運用でよくあるトラブルと解決策
8. 運用でよくあるトラブルと解決策

設定中に「ログインに失敗しました」というエラーが出ることがあります。その多くは、Entra ID管理者の設定ミスや、データベース内にユーザーを作成し忘れていることが原因です。また、クライアント側のIPアドレスがファイアウォールでブロックされていないかも確認してください。

もしアプリケーションから接続できない場合は、認証ライブラリのバージョンが古い可能性もあります。最新のMicrosoft.Data.SqlClientを使用しているか確認しましょう。複雑な設定に見えますが、一つずつ手順を追っていけば、初心者の方でも必ず安全なデータベース環境を構築できるはずです。クラウドの力を最大限に活かして、安全なシステム作りを目指しましょう!

まとめ

まとめ
まとめ

今回の記事では、Azure SQL Database(アジュール エスキューエル データベース)におけるセキュリティの要となる、Microsoft Entra ID(マイクロソフト エントラ アイディー)統合認証について詳しく解説してきました。クラウド環境でのデータベース運用において、従来のSQL認証だけに頼る手法は、パスワード管理の煩雑さや漏洩リスクという課題を抱えています。しかし、Entra IDを活用することで、IDの一元管理(いちげんかんり)が可能となり、組織全体のガバナンスを劇的に向上させることができます。

設定の核心となるのは、まずAzureポータルで「Microsoft Entra 管理者」を正しく指定することです。これにより、個別のパスワードを発行することなく、既存の組織アカウントでデータベース操作が可能になります。また、データベース内部で「CREATE USER ... FROM EXTERNAL PROVIDER」というSQL文を実行し、特定のユーザーやグループに対して適切な権限(ロール)を付与する手順も非常に重要です。これにより、最小権限の原則(さいしょうけんげんのげんそく)に基づいた安全なアクセス制御が実現します。

さらに、開発者の視点ではC#(シーシャープ)などのアプリケーションからパスワードレスで接続できるメリットが大きいです。接続文字列に認証情報をハードコードしない手法は、現代のセキュアな開発サイクル(DevSecOps)において必須のスキルと言えるでしょう。Azure CLIやsqlcmdといったコマンドラインツールを併用することで、インフラ構築から運用監視までを一貫して効率化できます。

クラウドネイティブなデータベース管理は、単にデータを保存する場所を作るだけでなく、そのデータに「誰が、いつ、どのように」アクセスするかを厳格に管理することから始まります。Entra ID認証を導入することは、単なる利便性の向上ではなく、企業の大切な情報資産を守るための強力な防壁を築くことと同義です。トラブルが発生した際も、認証ログやファイアウォール設定を一つずつ確認していく冷静な対応が求められます。

最後に、今回学んだ設定手順を実際のテスト環境で試してみることをお勧めします。手を動かして設定を行うことで、ドキュメントを読むだけでは得られない深い理解が得られるはずです。Azure SQL Databaseの強力な認証機能を使いこなし、安全でスケーラブルなシステム構築を目指していきましょう。

実践的な権限確認のサンプル

まとめとして、現在データベースに登録されているユーザーとその権限を一覧表示するSQLクエリを確認しておきましょう。運用フェーズでは、このように定期的にアクセス権限をチェックすることが推奨されます。


id | principal_name     | type_desc          | authentication_type
---+--------------------+--------------------+--------------------
1  | admin_user         | SQL_USER           | DATABASE
2  | user@example.com   | EXTERNAL_USER      | ENTRA_ID
3  | dev_group_res      | EXTERNAL_GROUPS    | ENTRA_ID
4  | web_app_identity   | EXTERNAL_USER      | MANAGED_IDENTITY

-- データベース内のユーザー一覧と認証タイプを確認するクエリ
SELECT 
    name AS principal_name,
    type_desc,
    authentication_type_desc AS authentication_type
FROM sys.database_principals
WHERE type IN ('S', 'E', 'X');

principal_name     | type_desc          | authentication_type
-------------------+--------------------+--------------------
admin_user         | SQL_USER           | DATABASE
user@example.com   | EXTERNAL_USER      | EXTERNAL
dev_group_res      | EXTERNAL_USER      | EXTERNAL
web_app_identity   | EXTERNAL_USER      | EXTERNAL
先生と生徒の振り返り会話

生徒

「先生、まとめまで読んで、Azure SQL DatabaseでEntra IDを使う重要性がよくわかりました!パスワードを覚える必要がなくなるのは本当に助かりますね。」

先生

「その通りです。パスワード忘れによる問い合わせ対応も減りますし、何よりセキュリティ強度が格段に上がります。C#のコードでパスワードを書かなくて済むのも驚きだったでしょう?」

生徒

「はい!接続文字列に『Authentication=Active Directory Default』と書くだけでいいなんて魔法みたいです。でも、もし外部の協力会社の人に一時的にアクセスしてほしい場合はどうすればいいですか?」

先生

「良い質問ですね。その場合は、その方のメールアドレスをゲストユーザーとしてEntra IDに招待し、今日学んだ『CREATE USER ... FROM EXTERNAL PROVIDER』を使えば、同じように安全なアクセスを許可できますよ。」

生徒

「なるほど、ゲスト管理まで統合できるんですね。まずは自分の開発環境で、Azure CLIを使ってログインするところから試してみます!」

先生

「ぜひ挑戦してみてください。コマンドラインでの確認ができれば、運用のトラブルシューティングもスムーズになります。一歩ずつ、セキュアなエンジニアを目指しましょう!」

カテゴリの一覧へ
新着記事
New1
COBOL
COBOLのEVALUATE文の使い方を完全ガイド!初心者でもわかる多岐選択
New2
C#
C#の拡張メソッドとは?既存クラスに機能を追加する便利技
New3
C#
ASP.NET CoreとC#の例外処理ベストプラクティス!エラーハンドリングの基本と実装方法
New4
Azure
Azure WAFとは?SQLインジェクションやXSSからWebサイトを守る初心者ガイド
人気記事
No.1
Java&Spring記事人気No1
C#
C#のstaticクラスとstaticメソッドの基本と使い方をやさしく解説!
No.2
Java&Spring記事人気No2
C#
C#のWPFとは?XAMLでGUI開発を基礎から完全解説!初心者向けの入門ガイド
No.3
Java&Spring記事人気No3
C#
C# WinForms入門!初心者でも簡単にWindowsアプリを作る方法
No.4
Java&Spring記事人気No4
C#
C#でswitch式を使う方法!C# 8.0以降の新機能を解説
No.5
Java&Spring記事人気No5
COBOL
COBOLのファイルステータス(FILE STATUS)の使い方を完全ガイド!初心者でもわかるエラー処理の基本
No.6
Java&Spring記事人気No6
C#
C#のイベント処理を完全攻略!WinFormsとWPFの基本を解説
No.7
Java&Spring記事人気No7
C#
C#のbool型を完全解説!初心者でもわかるtrueとfalseの基本と使い方
No.8
Java&Spring記事人気No8
C#
C#の文字列を数値に変換する方法(int.Parse・TryParse)をわかりやすく解説!