Azure SQL による Microsoft Entra 認証の構成と管理
適用対象: Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics
この記事では、Azure SQL データベース、Azure SQL Managed Instance、Azure Synapse Analytics と一緒に 認証用 Microsoft Entra ID を使用する方法について説明します。
Note
Microsoft Entra ID の、旧称は Azure Active Directory(Azure AD)です。
または、Azure Virtual Machines の SQL Server に Microsoft Entra 認証を構成することもできます。
前提条件
Azure SQL リソースと一緒に Microsoft Entra 認証を使用するには、次の前提条件が必要です。
- ユーザーとグループで設定された Microsoft Entra テナント。
- Azure SQL データベースまたは Azure SQL Managed Instance など、既存の Azure SQL リソース。
Microsoft Entra ID を作成して設定する
Azure SQL リソースに Microsoft Entra 認証を構成する前に、Microsoft Entra テナントを作成してユーザーとグループを設定する必要があります。 Microsoft Entra テナントは、Azure 内で完全に管理することも、オンプレミスの Active Directory Domain Service のフェデレーションに使用することもできます。
詳細については、以下を参照してください:
- Microsoft Entra ID とは
- オンプレミス ID と Microsoft Entra ID の統合
- ドメイン名を Microsoft Entra ID に追加します
- Microsoft Entra ID とのフェデレーションとは
- Microsoft Entra ID を使用したディレクトリ同期
- Windows PowerShell を使用して Microsoft Entra ID を管理する
- ハイブリッド ID で必要なポートとプロトコル
Microsoft Entra 管理者の設定
リソースで Microsoft Entra 認証を使用するには、Microsoft Entra 管理者が設定されている必要があります。 概念的には、手順はAzure SQL データベース、Azure Synapse Analytics、Azure SQL Managed Instance と同じである一方、このセクションでは、製品ごとに行うさまざまな API とポータル エクスペリエンスについて詳しく説明します。
Microsoft Entra 管理者は、Azure SQL リソースが作成された時に構成することもできます。 Microsoft Entra 管理者が既に構成されている場合、このセクションをスキップしてください。
Azure SQL Database と Azure Synapse Analytics
Microsoft Entra 管理者を設定すると、Azure SQL データベースと Azure Synapse Analytics の論理サーバーに Microsoft Entra 認証を有効します。 Azure Portal、PowerShell、Azure CLI、REST API を使用してサーバーから Microsoft Entra 管理者を設定できます。
Azure Portal で論理サーバー名を確認できます。
- Azure SQL データベースの [概要] ページの [サーバー名] フィールド内。
- Azure Synapse Analytics でスタンドアロン専用 SQL プールの [概要] ページの [サーバー名] フィールド内。
- Azure Synapse Analytics ワークスペースの [概要] ページの関連する SQL エンドポイント内。
Azure Portal で論理サーバーの Microsoft Entra 管理者を設定するには、次の手順に従います。
Azure Portal の [ディレクトリとサブスクリプション] ウィンドウで、Azure SQL リソースを含むディレクトリを現在のディレクトリとして選択します。
SQL サーバーを検索したら、データベース リソースの論理サーバーを選択し、[SQL Server] ウィンドウを開きます。
論理サーバーの [SQL Server] ウィンドウで [設定] で [Microsoft Entra ID] を選択し、[Microsoft Entra ID] ペインを開きます。
[Microsoft Entra ID] ウィンドウで、[管理者の設定] を選択して [Microsoft Entra ID] ウィンドウを開きます。
[Microsoft Entra ID] ウィンドウでは、現在のディレクトリのすべてのユーザー、グループ、アプリケーションが表示され、名前、エイリアス、ID で検索できます。 Microsoft Entra 管理者の目的の ID を見つけて選択したら、[選択] をクリックしてウィンドウを閉じます。
論理サーバーの Microsoft Entra ID ページの上部にある [保存] を選択します。
Microsoft Entra ユーザーとグループの管理者名の横に [オブジェクト ID] が表示されます。 アプリケーション(サービスプリンシパル)の場合は、アプリケーションIDが表示されます。
管理者を変更する処理には数分かかる場合があります。 [Microsoft Entra 管理者] フィールドに新しい管理者が表示されます。
管理者を削除するには、[Microsoft Entra ID] ページの上部にある [管理者の削除] を選択したら、[保存] を選択します。 Microsoft Entra 管理者を削除すると、論理サーバーの Microsoft Entra 認証が無効になります。
Note
Microsoft Entra 管理者は、ユーザー (データベース プリンシパル) としてサーバーの master
データベースに格納されます。 データベース プリンシパル名は一意である必要があるため、管理者の表示名をサーバーの master
データベースにあるユーザーの名前と同じにすることはできません。 名前を持つユーザーが既に存在する場合、Microsoft Entra 管理者のセットアップは失敗してロールバックされ、名前が既に使用されていることを示します。
Azure SQL Managed Instance
Microsoft Entra 管理者を設定すると、Azure SQL Managed Instance の Microsoft Entra 認証が有効になります。 Azure portal、PowerShell、Azure CLI、REST API を使用することにより、SQL Managed Instance の Microsoft Entra 管理者を設定できます。
Azure Portal を使用して SQL Managed Instance の読み取りアクセス許可を Microsoft Entra ID に付与するには、グローバル管理者または特権ロール管理者としてログインして次の手順に従います。
Azure portal で、右上隅にある自分のアカウントを選択し、[ディレクトリの切り替え] を選択して、現在どの Active Directory が自分の現在のディレクトリであるかを確認します。 必要に応じてディレクトリを切り替えます。
Azure portal の[ディレクトリとサブスクリプション] ウィンドウで Managed Instance を含むディレクトリを [現在のディレクトリ] として選択します。
SQL Managed Instance を検索して Managed Instance を選択し、[SQL Managed Instance] ウィンドウを開きます。 次に、[設定] で [Microsoft Entra ID] を選択し、インスタンスの [Microsoft Entra ID] ウィンドウを開きます。
[Microsoft Entra 管理者] ウィンドウで、ナビゲーション バーの [管理者の設定] を選択して [Microsoft Entra ID] ウィンドウを開きます。
Microsoft Entra ID ウィンドウで、ユーザーを検索し、ユーザーまたはグループの横にあるボックスをチェックして管理者になり、[選択] を押してウィンドウを閉じ、マネージド インスタンスの Microsoft Entra 管理者ページに戻ります。
Microsoft Entra ID ウィンドウには、現在のディレクトリ内のすべてのメンバーとグループが表示されます。 淡色表示されているユーザーまたはグループは、Microsoft Entra 管理者としてサポートされていないため選択できません 管理者として割り当てる ID を選択します。
マネージド インスタンスの Microsoft Entra 管理者 ページのナビゲーション バーで、[保存] を選択して Microsoft Entra 管理者を確認します。
管理者の変更操作が完了したら、Microsoft Entra 管理者フィールドに新しい管理者が表示されます。
Microsoft Entra ユーザーとグループの管理者名の横に [オブジェクト ID] が表示されます。 アプリケーション(サービスプリンシパル)の場合は、アプリケーションIDが表示されます。
ヒント
管理者を削除するには、[Microsoft Entra ID] ページの上部にある [管理者の削除] を選択したら、[保存] を選択します。
Microsoft Graph のアクセス許可の割り当て
セキュリティ グループ メンバーシップを介して接続するユーザーの認証や新しいユーザーの作成などのシナリオには、SQL Managed Instance は Microsoft Entra ID の読み取りアクセス許可が必要です。 Microsoft Entra 認証が機能するには、Managed Instance ID を ディレクト閲覧者の役割に割り当てる必要があります。 この操作は、Azure portal または PowerShell から実行できます。
一部の操作では、Microsoft Graph にクエリを実行するため、Azure SQL データベースと Azure Synapse Analytics にアクセス許可も必要です。詳細については、「Microsoft Graph のアクセス許可」に記載されています。 Azure SQL データベースと Azure Synapse Analytics には、これらのシナリオに対して詳細なグラフのアクセス許可がサポートされる一方、SQL Managed Instance にはディレクトリ閲覧者の役割が必要です。 詳細に設定されたアクセス許可とその割り当ては、「サービス プリンシパルに Microsoft Entra ユーザーの作成の許可」で詳細が記載されています。
ディレクトリ閲覧者ロール
Azure Portal の SQL Managed Instance の [Microsoft Entra ID] ページには、インスタンスにディレクトリ閲覧者のアクセス許可が割り当てられていないときに便利なバナーが表示されます。
[Microsoft Entra ID] ページの上部にあるバナーを選択し、インスタンスを表すシステム割り当てマネージド ID またはユーザー割り当てマネージド ID にアクセス許可を付与します。 テナントのグローバル管理者または特権ロール管理者のみがこの操作を実行できます。
操作が成功すると、右上隅に成功の通知が表示されます。
Microsoft Entra 管理者を使用して Microsoft Entra サーバー プリンシパル (ログイン) とデータベース プリンシパル (ユーザー) を作成できるようになりました。 詳細については、「Azure SQL Managed Instance を使用した Microsoft Entra の統合」を参照してください。
SQL で Microsoft Entra プリンシパルの作成
Microsoft Entra 認証を使用して SQL Database または Azure Synapse Analytics のデータベースに接続するには、少なくとも CONNECT
アクセス許可を持つその ID に対してプリンシパルをデータベースに構成する必要があります。
データベース ユーザーのアクセス許可
データベース ユーザーが作成されると、既定ではデータベースに CONNECT アクセス許可が付与されます。 データベース ユーザーは、次の 2 つの状況でもアクセス許可を継承します。
- ユーザーが Microsoft Entra グループのメンバーであり、サーバー上でアクセス許可も割り当てられている場合。
- ユーザーがログインから作成された場合、データベースに適用されるログインのサーバー割り当てアクセス許可が継承されます。
サーバー プリンシパルとデータベース プリンシパルのアクセス許可の管理は、プリンシパルの種類 (Microsoft Entra ID や SQL 認証など) とは関係なく同じように機能します。 ユーザーにアクセス許可を直接付与するのではなく、データベース ロールにアクセス許可を付与することをお勧めします。 適切なアクセス許可を持つ役割にユーザーを追加できます。 長期的なアクセス許可の管理が簡素化され、必要なときに ID が有効期限の切れたアクセス権を維持する可能性を低減します。
詳細については、以下を参照してください:
包含データベース ユーザー
包含データベースのユーザーは、master
データベースのログインに接続されていない SQL ユーザーの一種です。 Microsoft Entra の包含データベース ユーザーを作成するには、少なくとも ALTER ANY USER のアクセス許可を持つ Microsoft Entra ID を使用してデータベースに接続します。 次の T-SQL の例では、Microsoft Entra ID からデータベース プリンシパル Microsoft_Entra_principal_name
を作成します。
CREATE USER [<Microsoft_Entra_principal_name>] FROM EXTERNAL PROVIDER;
Microsoft Entra グループの包含データベース ユーザーを作成するには、グループの表示名を入力します。
CREATE USER [ICU Nurses] FROM EXTERNAL PROVIDER;
マネージド ID またはサービス プリンシパルの包含データベース ユーザーを作成するには、ID の表示名を入力します。
CREATE USER [appName] FROM EXTERNAL PROVIDER;
Microsoft Entra ユーザーの包含データベース ユーザーを作成するには、ID のユーザー プリンシパル名を入力します。
CREATE USER [adrian@contoso.com] FROM EXTERNAL PROVIDER;
ログイン ベースのユーザー
Note
Microsoft Entra サーバー プリンシパル (ログイン) は、現在、Azure SQL データベースおよび Azure Synapse Analytics でパブリック プレビュー段階です。 Microsoft Entra ログインは、Azure SQL Managed Instance と SQL Server 2022 用に一般提供されています。
Microsoft Entra サーバー プリンシパル (またはログイン) はサポートされており、包含データベース ユーザーが不要であることを指します。 データベース プリンシパル (ユーザー) はサーバー プリンシパルに基づいて作成でき、Microsoft Entra ユーザーがログインのサーバー レベルに割り当てられたアクセス許可を継承できることを指します。
CREATE USER [appName] FROM LOGIN [appName];
詳細については、SQL Managed Instance の概要に関する記事を参照してください。 Microsoft Entra サーバー プリンシパル (ログイン) の作成の構文については、「CREATE LOGIN」を参照してください。
外部ユーザー
Azure サブスクリプションに関連付けられているテナントとは異なる Microsoft Entra テナントで管理されている ID のデータベース ユーザーを直接作成することはできません。 ただし、他のディレクトリ内のユーザーは、関連付けられているディレクトリに外部ユーザーとしてインポートできます。 データベースにアクセスできる包含データベース ユーザーを作成するために使用できます。 外部ユーザーは、Microsoft Entra グループのメンバーシップによってアクセスすることもできます。
例: Microsoft Entra のフェデレーション ドメインまたはマネージド ドメインのユーザーを表す包含データベース ユーザーを作成するには、次のようにします。
CREATE USER [alice@fabrikam.com] FROM EXTERNAL PROVIDER;
外部ユーザーとしてマネージド ドメインにインポートされるフェデレーション ドメイン ユーザー アカウントは、マネージド ドメインの ID を使用する必要があります。
名前付けに関する考慮事項
T-SQL の CREATE LOGIN
ステートメントと CREATE USER
ステートメントのユーザー名に含まれるコロン :
やアンパサンド &
などの特殊文字は、サポートされていません。
Microsoft Entra ID と Azure SQL は、1 つの重要な方法でユーザー管理設計を分岐します。Microsoft Entra ID はテナント内で表示名を複製できるようにする一方、Azure SQL はサーバーまたはインスタンスのすべてのサーバー プリンシパル、ならびにデータベースのすべてのデータベース プリンシパルに一意の名前が必要です。 Azure SQL はプリンシパルの作成時に ID の Microsoft Entra 表示名を直接使用するため、ユーザーの作成時にエラーが発生する可能性があります。 この問題を解決するために、Azure SQL は現在プレビュー段階である WITH OBJECT_ID
拡張機能をリリースしました。これにより、ユーザーはサーバーまたはインスタンスに追加される ID の Microsoft Entra オブジェクト ID を指定できます。
Microsoft Graph に対するアクセス許可
CREATE USER ... FROM EXTERNAL PROVIDER
コマンドは、Azure SQL がログインしたユーザーに代わって Microsoft Entra ID (「外部プロバイダー」) にアクセスする必要があります。 Microsoft Entra ID が Azure SQL に例外を返す原因になる状況が発生することがあります。
- Microsoft Entra ID 固有のエラー メッセージを含む SQL エラー 33134 が発生する可能性があります。 このエラーは一般に、アクセスが拒否されたこと、ユーザーがリソースにアクセスするには MFA に登録する必要があること、またはファーストパーティのアプリケーション間のアクセスを事前承認によって処理する必要があることを示します。 最初の 2 つのケースでは、問題は通常、ユーザーの Microsoft Entra テナントで設定されている条件付きアクセス ポリシーによって発生し、ポリシーによってユーザーは外部プロバイダーにアクセスできなくなります。 アプリケーション '00000003-0000-0000-c000-000000000000' (Microsoft Graph API のアプリケーション ID) へのアクセスを許可するように条件付きアクセス ポリシーを更新すると、問題が解決されます。 「ファーストパーティのアプリケーション間のアクセスを事前承認で処理する必要がある」というエラーが発生した場合、この問題は、ユーザーがサービス プリンシパルとしてサインインしていることが原因です。 代わりにユーザーによってコマンドを実行した場合、コマンドは成功するはずです。
- "接続がタイムアウトしました" と表示された場合は、接続文字列の
TransparentNetworkIPResolution
パラメーターを false に設定することが必要になる場合があります。 詳しくは、「Connection timeout issue with .NET Framework 4.6.1 - TransparentNetworkIPResolution」(.NET Framework 4.6.1 での接続タイムアウトの問題 - TransparentNetworkIPResolution) をご覧ください。
Microsoft Entra ID に基づく包含データベース ユーザーの作成の詳細については、「CREATE USER」を参照してください。
多要素認証を構成する
Azure SQL リソースのセキュリティを強化するには、多要素認証 (MFA) を構成することを検討してください。これにより、ユーザーは通話や認証アプリなどの 2 つ目の代替方法を使用してデータベースに認証を行うように求められます。
Azure SQL リソースで多要素認証を使用するには、まず多要素認証を有効にしてから条件付きアクセス ポリシーを使用し、Azure SQL リソースに MFA を実施します。
Microsoft Entra で接続
Microsoft Entra 認証が構成されたら、SQL Server Management Studio や SQL Server Data Tools などの Microsoft ツールで SQL リソースに接続するために使用し、クライアント アプリケーションを構成したら、Microsoft Entra ID を使用して接続できます。
Microsoft Entra 認証のトラブルシューティング
問題のトラブルシューティングのガイダンスについては、「ブログ: Azure SQL データベースと Azure Synapse で Microsoft Entra 認証に関連する問題のトラブルシューティング」を参照してください。