Azure SQL による Microsoft Entra 認証の構成と管理

適用対象:Azure SQL データベースAzure SQL Managed InstanceAzure Synapse Analytics

この記事では、Microsoft Entra ID (旧称 Azure Active Directory) インスタンスを作成して設定した後、Azure SQL データベースAzure SQL Managed Instance、および Azure Synapse Analytics で Microsoft Entra を使用する方法を示します。 概要については、Microsoft Entra 認証をご覧ください。

Note

Microsoft Entra ID の、旧称は Azure Active Directory(Azure AD)です。

Microsoft Entra 以外の認証方法。

Microsoft Entra ID は、次の認証方法をサポートします。

  • Microsoft Entra クラウド専用 ID
  • 以下をサポートする Microsoft Entra ハイブリッド ID
    • シームレスなシングルサインオン(SSO)と連動した2つのオプションを備えたクラウド認証
      • Microsoft Entra パスワード ハッシュ認証
      • Microsoft Entra パススルー認証
    • フェデレーション認証

Microsoft Entra 認証の方法の詳細については、「Azure Active Directory ハイブリッド ID ソリューションの適切な認証方法を選択する」を参照してください。

Microsoft Entra ハイブリッド ID、セットアップ、および同期に関する詳細については、次の記事を参照してください。

Microsoft Entra ID を作成して設定する

Microsoft Entra テナントを作成し、ユーザーとグループを設定します。 Microsoft Entra テナントは、Azure 内で完全に管理することも、オンプレミスの Active Directory Domain Service のフェデレーションに使用することもできます。

詳細については、以下を参照してください:

Azure サブスクリプションを Microsoft Entra ID に関連付ける、または追加する

  1. Azure サブスクリプションを Microsoft Entra ID に関連付けるには、ディレクトリを、データベースをホストする Azure サブスクリプションの信頼できるディレクトリにします。 詳細については、「Microsoft Entra テナントに Azure サブスクリプションを関連付ける、または追加する」をご覧ください。

  2. Azure Portal のディレクトリ スイッチャーを使用して、ドメインに関連付けられたサブスクリプションに切り替えます。

    重要

    Azure のすべてのサブスクリプションは、Microsoft Entra インスタンスとの間に信頼関係があります。 ディレクトリを信頼することで、ユーザー、サービス、デバイスを認証しています。 複数のサブスクリプションが同じディレクトリを信頼できますが、1 つのサブスクリプションは 1 つのディレクトリだけを信頼します。 このサブスクリプションとディレクトリの間の信頼関係は、サブスクリプションと Azure 内の他のすべてのリソース (Web サイト、データベースなど) の間の関係とは異なります。後者は、サブスクリプションの子リソースにより近いものです。 サブスクリプションの有効期限が切れた場合、サブスクリプションに関連付けられたこれらの他のリソースへのアクセスも停止します。 ただし、ディレクトリは Azure 内に残っているため、別のサブスクリプションをそのディレクトリと関連付けると、ディレクトリ ユーザーの管理を継続できます。 リソースの詳細については、Azure でのリソース アクセスの説明に関するページを参照してください。 この信頼関係に関する詳細は、「Azure サブスクリプションを Microsoft Entra ID に関連付ける/追加する方法」をご覧ください。

SQL Database のサーバーでの Microsoft Entra 管理

Azure 内の (SQL Database または Azure Synapse をホストする) 各論理サーバーは、サーバー全体の管理者である単一のサーバー管理者アカウントを使用して開始されます。 2 つ目の 管理者アカウントを Microsoft Entra アカウントとして作成できます。 このプリンシパルは、サーバーの master データベースの包含データベース ユーザーとして作成されます。 管理者アカウントは、すべてのユーザー データベースの db_owner ロールのメンバーであり、dbo ユーザーとして各ユーザー データベースに入ります。 管理者アカウントの詳細については、「データベースとログインの管理」を参照してください。

geo レプリケーションで Microsoft Entra ID を使用する場合、Microsoft Entra 管理者をプライマリ サーバー用とセカンダリ サーバー用の両方に構成する必要があります。 サーバーに Microsoft Entra 管理者がいない場合、Microsoft Entra のログインとユーザーはサーバーへのアクセス エラー Cannot connect を受け取ります。

Note

Microsoft Entra アカウント (サーバー管理者アカウントを含む) に基づいていないユーザーは、Microsoft Entra に基づくユーザーを作成できません。提示されるデータベース ユーザーを Microsoft Entra ID で検証する権限がないためです。

Microsoft Entra 管理者のプロビジョニング (SQL Managed Instance)

重要

次の手順は、Azure SQL Managed Instance をプロビジョニングする場合にのみに実行します。 この操作は、Microsoft Entra ID のグローバル管理者または特権ロール管理者だけが実行できます。

Microsoft Entra ID 内のグループにディレクトリ閲覧者ロールを割り当てることができます。 その後、グループの所有者が、このグループのメンバーとしてマネージ インスタンス ID を追加すると、その SQL Managed Instance に Microsoft Entra 管理者をプロビジョニングできるようになります。 この機能の詳細については、「Azure SQL の Microsoft Entra のディレクトリ閲覧者ロール」を参照してください。

セキュリティ グループ メンバーシップを通じたユーザーの認証や、新しいユーザーの作成などといったタスクを実行するには、SQL Managed Instance に Microsoft Entra ID の読み取りアクセス許可が必要です。 そのためには、SQL Managed Instance に Microsoft Entra ID の読み取りアクセス許可を付与する必要があります。 この操作は、Azure portal または PowerShell から実行できます。

Azure portal

Azure portal を使用して SQL Managed Instance に Microsoft Entra の読み取りアクセス許可を付与するには、グローバル管理者としてサインインし、次の手順に従います。

  1. Azure portal で、右上隅にある自分のアカウントを選択し、[ディレクトリの切り替え] を選択して、現在どの Active Directory が自分の現在のディレクトリであるかを確認します。 必要に応じてディレクトリを切り替えます。

    Screenshot of the Azure portal showing where to switch your directory.

  2. 現在のディレクトリ に適切な Microsoft Entra ディレクトリを選択します。

    この手順では、Microsoft Entra ID に関連付けられているサブスクリプションを SQL Managed Instance にリンクし、Microsoft Entra テナントと SQL Managed Instance で同じサブスクリプションが使用されるようにします。

  3. これで、SQL Managed Instance に対する Microsoft Entra 管理者を選択できるようになります。 そのためには、Azure portal でマネージド インスタンス リソースに移動し、[設定]Microsoft Entra 管理者を選択します。

    Screenshot of the Azure portal showing the Microsoft Entra admin page open for the selected SQL managed instance.

  4. Microsoft Entra 管理者ページの上部でバナーを選択し、現在のユーザーにアクセス許可を付与します。

    Screenshot of the dialog for granting permissions to a SQL managed instance for accessing Microsoft Entra ID with the Grant permissions button selected.

  5. 操作が正常に完了すると、右上隅に次の通知が表示されます。

    Screenshot of a notification confirming that Microsoft Entra ID read permissions have been successfully updated for the managed instance.

  6. Microsoft Entra 管理者ページで、ナビゲーション バーから [管理者の設定] を選択して、[Microsoft Entra ID] ウィンドウを開きます。

    Screenshot showing the Set admin command highlighted on the Microsoft Entra admin page for the selected SQL managed instance.

  7. Microsoft Entra ID ウィンドウで、ユーザーを検索し、ユーザーまたはグループの横にあるボックスをチェックして管理者になり、[選択] を押してウィンドウを閉じ、マネージド インスタンスの Microsoft Entra 管理者ページに戻ります。

    Microsoft Entra ID ウィンドウには、現在のディレクトリ内のすべてのメンバーとグループが表示されます。 淡色表示されているユーザーまたはグループは、Microsoft Entra 管理者としてサポートされていないため選択できません サポートされている管理者の一覧については、「Microsoft Entra の機能と制限事項」をご覧ください。 Azure ロール ベースのアクセス制御 (Azure RBAC) は Azure portal にのみ適用され、SQL Database、SQL Managed Instance、または Azure Synapse には反映されません。

  8. マネージド インスタンスの Microsoft Entra 管理者 ページのナビゲーション バーで、[保存] を選択して Microsoft Entra 管理者を確認します。

    Screenshot of the Microsoft Entra admin page with the Save button in the top row next to the Set admin and Remove admin buttons.

    管理者を変更する処理には数分かかる場合があります。 [Microsoft Entra 管理者] ボックスに新しい管理者が表示されます。

    Microsoft Entra ユーザーとグループの管理者名の横に [オブジェクト ID] が表示されます。 アプリケーション(サービスプリンシパル)の場合は、アプリケーションIDが表示されます。

SQL Managed Instance に対する Microsoft Entra 管理者をプロビジョニングした後、CREATE LOGIN 構文で Microsoft Entra サーバー プリンシパル (ログイン) の作成を始めることができます。 詳細については、SQL Managed Instance の概要に関する記事を参照してください。

ヒント

後で管理者を削除するには、[Microsoft Entra 管理者] ページの上部にある [管理者の削除] を選択した後、[保存] を選択します。

PowerShell

PowerShell を使用して SQL Managed Instance に Microsoft Entra ID への読み取りアクセス許可を付与するには、次のスクリプトを実行します。

# This script grants "Directory Readers" permission to a service principal representing the SQL Managed Instance.
# It can be executed only by a user who is a member of the **Global Administrator** or **Privileged Roles Administrator** role.

Import-Module Microsoft.Graph.Authentication
$managedInstanceName = "<ManagedInstanceName>" # Enter the name of your managed instance
$tenantId = "<TenantId>"                       # Enter your tenant ID

Connect-MgGraph -TenantId $tenantId -Scopes "RoleManagement.ReadWrite.Directory"
 
# Get Microsoft Entra "Directory Readers" role and create if it doesn't exist
$roleName = "Directory Readers"
$role = Get-MgDirectoryRole -Filter "DisplayName eq '$roleName'"
if ($role -eq $null) {
    # Instantiate an instance of the role template
    $roleTemplate = Get-MgDirectoryRoleTemplate -Filter "DisplayName eq '$roleName'"
    New-MgDirectoryRoleTemplate -RoleTemplateId $roleTemplate.Id
    $role = Get-MgDirectoryRole -Filter "DisplayName eq '$roleName'"
}

# Get service principal for your SQL Managed Instance
$roleMember = Get-MgServicePrincipal -Filter "DisplayName eq '$managedInstanceName'"
$roleMember.Count
if ($roleMember -eq $null) {
    Write-Output "Error: No service principal with name '$($managedInstanceName)' found, make sure that managedInstanceName parameter was entered correctly."
    exit
}
if (-not ($roleMember.Count -eq 1)) {
    Write-Output "Error: Multiple service principals with name '$($managedInstanceName)'"
    Write-Output $roleMember | Format-List DisplayName, Id, AppId
    exit
}

# Check if service principal is already member of Directory Readers role
$isDirReader = Get-MgDirectoryRoleMember -DirectoryRoleId $role.Id -Filter "Id eq '$($roleMember.Id)'"
if ($isDirReader -eq $null) {
    # Add principal to Directory Readers role
    Write-Output "Adding service principal '$($managedInstanceName)' to 'Directory Readers' role..."
    $body = @{
        "@odata.id"= "https://graph.microsoft.com/v1.0/directoryObjects/{$($roleMember.Id)}"
    }
    New-MgDirectoryRoleMemberByRef -DirectoryRoleId $role.Id -BodyParameter $body
    Write-Output "'$($managedInstanceName)' service principal added to 'Directory Readers' role."
} else {
    Write-Output "Service principal '$($managedInstanceName)' is already member of 'Directory Readers' role."
}

SQL Managed Instance に対する PowerShell

PowerShell コマンドレットを実行するには、Azure PowerShell をインストールし、実行している必要があります。 詳細については、Azure PowerShell の概要に関するページを参照してください。

重要

Azure SQL Managed Instance では、PowerShell Azure Resource Manager (RM) モジュールが引き続きサポートされていますが、今後の開発はすべて Az.Sql モジュールを対象に行われます。 AzureRM モジュールのバグ修正は、少なくとも 2020 年 12 月までは引き続き受け取ることができます。 Az モジュールと AzureRm モジュールのコマンドの引数は実質的に同じです。 その互換性の詳細については、「新しい Azure PowerShell Az モジュールの概要」を参照してください。

Microsoft Entra 管理者をプロビジョニングするには、次の Azure PowerShell コマンドを実行します。

  • Connect-AzAccount
  • Select-AzSubscription

次の表では、SQL Managed Instance に対する Microsoft Entra 管理者のプロビジョニングと管理に使用するコマンドレットの一覧を示します。

コマンドレット名 説明
Set-AzSqlInstanceActiveDirectoryAdministrator 現在のサブスクリプションで SQL Managed Instance に対する Microsoft Entra 管理者をプロビジョニングします。 (現在のサブスクリプションから実行する必要があります)。
Remove-AzSqlInstanceActiveDirectoryAdministrator 現在のサブスクリプションで SQL Managed Instance に対する Microsoft Entra 管理者を削除します。
Get-AzSqlInstanceActiveDirectoryAdministrator 現在のサブスクリプションでの SQL Managed Instance に対する Microsoft Entra 管理者に関する情報を返します。

次のコマンドでは、ResourceGroup01 というリソース グループに関連付けられている、ManagedInstance01 という SQL Managed Instance の Microsoft Entra 管理者に関する情報が取得されます。

Get-AzSqlInstanceActiveDirectoryAdministrator -ResourceGroupName "ResourceGroup01" -InstanceName "ManagedInstance01"

次のコマンドでは、ManagedInstance01 という SQL Managed Instance の、DBAs という Microsoft Entra 管理者グループがプロビジョニングされます。 このサーバーは、リソース グループ ResourceGroup01 に関連付けられています。

Set-AzSqlInstanceActiveDirectoryAdministrator -ResourceGroupName "ResourceGroup01" -InstanceName "ManagedInstance01" -DisplayName "DBAs" -ObjectId "40b79501-b343-44ed-9ce7-da4c8cc7353b"

次のコマンドを実行すると、リソース グループ ResourceGroup01 に関連付けられている、ManagedInstanceName01 という SQL Managed Instance の Microsoft Entra 管理者が削除されます。

Remove-AzSqlInstanceActiveDirectoryAdministrator -ResourceGroupName "ResourceGroup01" -InstanceName "ManagedInstanceName01" -Confirm -PassThru

Microsoft Entra 管理者のプロビジョニング (SQL Database)

重要

SQL Database または Azure Synapse に対するサーバーをプロビジョニングする場合にのみ、次の手順に従います。

次の 2 つの手順では、Azure portal と PowerShell を使用し、サーバーに対して Microsoft Entra 管理者をプロビジョニングする方法を示します。

Azure portal

  1. Azure portal の右上隅にあるアカウントを選択し、[ディレクトリの切り替え] を選択して [ディレクトリとサブスクリプション] ページを開きます。 Azure SQL データベースまたは Azure Synapse Analytics を現在のディレクトリとして含む Microsoft Entra ディレクトリを 選択します。

  2. SQL サーバーを検索し、Azure SQL Database の論理サーバーを選択します。

    Search for and select SQL servers.

    Note

    このページでは、[SQL Server] を選択する前に、名前の横にある星マークを選択してそのカテゴリを "お気に入りに追加" し、[SQL Server] を左側のナビゲーション メニューに追加することができます。

    Azure SQL ダッシュボードにアクセスすることも検討してください。

  3. SQL Server ページで、[Microsoft Entra ID] を選択します。

  4. Microsoft Entra ID ページで、[管理者の設定] を選択して Microsoft Entra ID ウィンドウを開きます。

    Screenshot shows the option to set the Microsoft Entra admin for SQL servers.

  5. Microsoft Entra ID ウィンドウで、ユーザーを検索し、管理者にするユーザーまたはグループを選択します。 [選択] で選択を確定し、ウィンドウを閉じて論理サーバーの Microsoft Entra ID ページに戻ります。 (Microsoft Entra ID ウィンドウには、現在のディレクトリのすべてのメンバーとグループが表示されます。淡色表示されたユーザーまたはグループは、Microsoft Entra 管理者としてサポートされていないため、選択できません。サポートされている管理者の一覧については、「SQL Database または Azure Synapse で Microsoft Entra 認証を使用する」の「Microsoft Entra の 機能と制限事項」セクションを参照してください)。Azure ロールベースのアクセス制御 (Azure RBAC) はポータルにのみ適用され、サーバーには反映されません。

  6. 論理サーバーの Microsoft Entra ID ページの上部にある [保存] を選択します。

    Screenshot shows the option to save a Microsoft Entra admin.

    Microsoft Entra ユーザーとグループの管理者名の横に [オブジェクト ID] が表示されます。 アプリケーション(サービスプリンシパル)の場合は、アプリケーションIDが表示されます。

管理者を変更する処理には数分かかる場合があります。 [Microsoft Entra 管理者] フィールドに新しい管理者が表示されます。

Note

Microsoft Entra 管理者を設定するときは、新しい管理者名 (ユーザーまたはグループ) がサーバー認証ユーザーとして仮想 master データベースに既に存在していてはいけません。 存在していると、Microsoft Entra 管理者のセットアップが失敗して変更がロールバックされ、その管理者 (名) が既に存在していることが示されます。 サーバー認証ユーザーは Microsoft Entra ID の一部ではないので、Microsoft Entra 認証を使用してサーバーに接続しようとすると失敗します。

後で管理者を削除するには、[Microsoft Entra ID] ページの上部にある [管理者の削除] を選択した後、[保存] を選択します。 これにより、論理サーバーの Microsoft Entra 認証が無効になります。

SQL Database と Azure Synapse 用の PowerShell

PowerShell コマンドレットを実行するには、Azure PowerShell をインストールし、実行している必要があります。 詳細については、Azure PowerShell の概要に関するページを参照してください。 Microsoft Entra 管理者をプロビジョニングするには、次の Azure PowerShell コマンドを実行します。

  • Connect-AzAccount
  • Select-AzSubscription

SQL Database および Azure Synapse に対する Microsoft Entra 管理者のプロビジョニングと管理に使用するコマンドレット:

コマンドレット名 説明
Set-AzSqlServerActiveDirectoryAdministrator SQL Database または Azure Synapse をホストするサーバーに対する Microsoft Entra 管理者をプロビジョニングします。 (現在のサブスクリプションから実行する必要があります)。
Remove-AzSqlServerActiveDirectoryAdministrator SQL Database または Azure Synapse をホストするサーバーに対する Microsoft Entra 管理者を削除します。
Get-AzSqlServerActiveDirectoryAdministrator SQL Database または Azure Synapse をホストするサーバーに対して現在構成されている Microsoft Entra 管理者に関する情報を返します。

これらの各コマンドの情報を確認するには、PowerShell の get-help コマンドを使用します。 たとえば、get-help Set-AzSqlServerActiveDirectoryAdministrator のようにします。

次のスクリプトでは、Group-23 という名前のリソース グループ内にあるサーバー demo_server に対して、DBA_Group という名前の Microsoft Entra 管理者グループ (オブジェクト ID 40b79501-b343-44ed-9ce7-da4c8cc7353f) をプロビジョニングします。

Set-AzSqlServerActiveDirectoryAdministrator -ResourceGroupName "Group-23" -ServerName "demo_server" -DisplayName "DBA_Group"

DisplayName 入力パラメーターには、Microsoft Entra ID の表示名またはユーザー プリンシパル名を使用できます。 たとえば、DisplayName="John Smith"DisplayName="johns@contoso.com" です。 Microsoft Entra グループの場合、Microsoft Entra ID の表示名のみがサポートされます。

Note

Azure PowerShell コマンド Set-AzSqlServerActiveDirectoryAdministrator では、サポートされていないユーザーに対する Microsoft Entra 管理者のプロビジョニングは禁止されていません。 サポートされていないユーザーのプロビジョニングは可能ですが、このようなユーザーはデータベースに接続できません

次の例では、オプションとして ObjectIDを使用します。

Set-AzSqlServerActiveDirectoryAdministrator -ResourceGroupName "Group-23" -ServerName "demo_server" `
    -DisplayName "DBA_Group" -ObjectId "40b79501-b343-44ed-9ce7-da4c8cc7353f"

Note

DisplayName が一意でない場合は、Microsoft Entra の ObjectID が必要です。 ObjectIDDisplayName の値を取得するには、Azure Portal の [Microsoft Entra ID] セクションで、ユーザーまたはグループのプロパティを確認します。

次の例では、サーバーに対する現在の Microsoft Entra 管理者に関する情報が返されます。

Get-AzSqlServerActiveDirectoryAdministrator -ResourceGroupName "Group-23" -ServerName "demo_server" | Format-List

次の例では、Microsoft Entra 管理者を削除します。

Remove-AzSqlServerActiveDirectoryAdministrator -ResourceGroupName "Group-23" -ServerName "demo_server"

Note

REST API を使用して Microsoft Entra 管理者をプロビジョニングすることもできます。 詳細については、Service Management REST API リファレンスと Azure SQL Database の操作に関するページを参照してください。

クライアント コンピューターを構成する

Note

System.Data.SqlClient では、非推奨となる Azure Active Directory 認証ライブラリ (ADAL) を使用します。 Microsoft Entra 認証に System.Data.SqlClient 名前空間を使用している場合は、Microsoft.Data.SqlClient および Microsoft Authentication Library (MSAL) にアプリケーションを移行してください。 詳細については、「Microsoft Entra 認証を SqlClient で使用する」を参照してください。

アプリケーションで ADAL.DLL を引き続き使用する必要がある場合は、このセクションのリンクから最新の ADAL.DLL ライブラリを含む最新の ODBC または OLE DB ドライバーをインストールしてください。

Microsoft Entra の ID を使用して SQL Database または Azure Synapse に接続するアプリケーションまたはユーザーが存在するすべてのクライアント コンピューターには、次のソフトウェアをインストールする必要があります。

これらの要件は、次の操作を行うことで満たすことができます。

  • 最新バージョンの SQL Server Management Studio または SQL Server Data Tools をインストールすると、.NET Framework 4.6 の要件が満たされます。
    • SSMS の場合、x86 バージョンの ADAL.DLLがインストールされます。
    • SSDT の場合、amd64 バージョンの ADAL.DLLがインストールされます。
    • Visual Studio のダウンロードにある最新の Visual Studio は .NET Framework 4.6 の要件を満たしていますが、必要な amd64 バージョンの ADAL.DLL はインストールされません。

Microsoft Entra ID にマップされている包含ユーザーを作成する

このセクションでは、Azure SQL データベース、Azure SQL Managed Instance、および Azure Synapse で Microsoft Entra 認証を使用するための要件と重要な考慮事項について説明します。

  • SQL Database と Azure Synapse での Microsoft Entra 認証では、Microsoft Entra ID に基づく包含データベース ユーザーを使用する必要があります。 包含データベース ユーザーは、master データベース内にログインを持たず、データベースに関連付けられている Microsoft Entra ID にマップされます。 Microsoft Entra ID には、個々のユーザー アカウント、グループ、またはアプリケーションを指定できます。 包含データベース ユーザーの詳細については、「 包含データベース ユーザー - データベースの可搬性を確保する」を参照してください。 Microsoft Entra の ID に基づく包含データベース ユーザーの作成の詳細については、「CREATE USER (Transact-SQL)」を参照してください。

  • SQL Managed Instance では Microsoft Entra サーバー プリンシパル (ログイン) がサポートされているため、包含データベース ユーザーを使用する必要はありません。 これにより、Microsoft Entra ユーザー、グループ、またはアプリケーションからログインを作成できます。 つまり、包含データベース ユーザーではなく、Microsoft Entra サーバー ログインを使用して、SQL Managed Instance での認証を行うことができます。 詳細については、SQL Managed Instance の概要に関する記事を参照してください。 Microsoft Entra サーバー プリンシパル (ログイン) の作成の構文については、「CREATE LOGIN」を参照してください。

  • データベース ユーザー (管理者を除く) は、Azure portal を使用してデータベースを作成することはできません。 Microsoft Entra ロールは、SQL Database、SQL Managed Instance、または Azure Synapse 内のデータベースには反映されません。 Microsoft Entra ロールは Azure リソースを管理します。データベースのアクセス許可には適用されません。 たとえば、SQL Server 投稿者ロールでは、SQL Database、SQL Managed Instance、または Azure Synapse 内のデータベースに接続するためのアクセス権は付与されません。 Transact-SQL ステートメントを使用して、アクセス許可をデータベースで直接付与する必要があります。

  • Azure サブスクリプションに関連付けられているテナントとは異なる Microsoft Entra テナントで管理されている ID のデータベース ユーザーを直接作成することはできません。 ただし、他のディレクトリ内のユーザーは、関連付けられているディレクトリに外部ユーザーとしてインポートできます。 その後、SQL Database にアクセスできる包含データベース ユーザーを作成するために使用できます。 外部ユーザーは、データベース ユーザーを含む Microsoft Entra グループのメンバーシップを通じてアクセスすることもできます。

  • T-SQL の CREATE LOGIN ステートメントと CREATE USER ステートメントのユーザー名に含まれるコロン : やアンパサンド & などの特殊文字は、サポートされていません。

重要

2048 より多くの Microsoft Entra セキュリティ グループに属している Microsoft Entra のユーザーとサービス プリンシパル (Microsoft Entra アプリケーション) は、SQL Database、SQL Managed Instance、または Azure Synapse のデータベースにログインできません。

Microsoft Entra ベースの包含データベース ユーザー (データベースを所有するサーバー管理者以外) を作成するには、少なくとも ALTER ANY USER アクセス許可を持つユーザーとして、Microsoft Entra の ID でデータベースに接続します。 次の T-SQL の例では、Microsoft_Entra_principal_name は Microsoft Entra ユーザーのユーザー プリンシパル名または Microsoft Entra グループの表示名を指定できます。

CREATE USER [<Microsoft_Entra_principal_name>] FROM EXTERNAL PROVIDER;

例: Microsoft Entra のフェデレーション ドメインまたはマネージド ドメインのユーザーを表す包含データベース ユーザーを作成するには、次のようにします。

CREATE USER [bob@contoso.com] FROM EXTERNAL PROVIDER;
CREATE USER [alice@fabrikam.onmicrosoft.com] FROM EXTERNAL PROVIDER;

Microsoft Entra グループを表す包含データベース ユーザーを作成するには、グループの表示名を指定します。

CREATE USER [ICU Nurses] FROM EXTERNAL PROVIDER;

Microsoft Entra トークンを使用して接続するアプリケーションを表す包含データベース ユーザーを作成するには、次のようにします。

CREATE USER [appName] FROM EXTERNAL PROVIDER;

CREATE USER ... FROM EXTERNAL PROVIDER コマンドでは、SQL がログイン ユーザーの代わりに Microsoft Entra ID (「外部プロバイダー」) にアクセスすることが必要です。 場合によっては、Microsoft Entra ID によって 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 管理者を削除すると、Microsoft Entra 認証ユーザーはサーバーに接続できなくなります。 必要に応じて、SQL データベース管理者は不要な Microsoft Entra ユーザーを手動で削除できます。

データベース ユーザーを作成すると、そのユーザーには CONNECT アクセス許可が付与され、PUBLIC ロールのメンバーとしてそのデータベースに接続できるようになります。 最初には、そのユーザーが使用できるアクセス許可は PUBLIC ロールおよび、そのユーザーがメンバーであるすべての Microsoft Entra グループに付与されます。 Microsoft Entra ベースの包含データベース ユーザーへのアクセス許可付与は、他の種類のユーザーにアクセス許可を付与するのと同じ方法で動作します。 個々のユーザーに権限を直接付与するのではなく、データベース ロールにアクセス許可を付与し、それらのロールにユーザーを追加することをお勧めします。 詳細については、 データベース エンジンのアクセス許可の基本知識に関するページを参照してください。 特殊な SQL Database ロールの詳細については、「 Azure SQL Database におけるデータベースとログインの管理」を参照してください。 外部ユーザーとしてマネージド ドメインにインポートされるフェデレーション ドメイン ユーザー アカウントは、マネージド ドメインの ID を使用する必要があります。

データベースのメタデータでは、Microsoft Entra ユーザーはタイプ E (EXTERNAL_USER) 、グループはタイプ X (EXTERNAL_GROUPS) でマークされます。 詳細については、「sys.database_principals」を参照してください。

SSMS または SSDT を使用してデータベースに接続する

Microsoft Entra 管理者が正しく設定されていることを確認するには、Microsoft Entra の管理者アカウントを使用して master データベースに接続します。 Microsoft Entra ベースの包含データベース ユーザーを作成するには、データベースへのアクセス権と少なくとも ALTER ANY USER アクセス許可を持つ Microsoft Entra ID を使用してデータベースに接続します。

Microsoft Entra ID を使用して SSMS または SSDT で接続する

次の手順では、SQL Server Management Studio (SSMS) または SQL Server Database Tools (SSDT) で Microsoft Entra の ID を使用して SQL Database に接続する方法を示します。

Microsoft Entra ID - 統合済み

フェデレーションされているドメイン、またはパススルーおよびパスワード ハッシュ認証のためのシームレスなシングル サインオン用に構成されたマネージド ドメインからの Microsoft Entra 資格情報を使用して Windows にログインしている場合に、この方法を使用します。 詳細については、「Microsoft Entra シームレス シングル サインオン」を参照してください。

  1. SSMS または SSDT を起動し、[サーバーへの接続] (または [データベース エンジンへの接続]) ダイアログ ボックスの [認証] ボックスで、[Azure Active Directory - 統合] を選択します。 接続に既存の資格情報が提示されるため、パスワードを入力する必要はありません。

    Screenshot from SSMS showing Microsoft Entra Integrated authentication.

  2. [オプション] ボタンを選択し、 [接続プロパティ] ページの [データベースへの接続] ボックスに、接続先となるユーザー データベースの名前を入力します。

    Screenshot from SSMS of the Options menu.

Microsoft Entra ID - パスワード

Microsoft Entra マネージド ドメインを使用して Microsoft Entra プリンシパル名で接続する場合は、この方法を使用します。 また、リモートで作業する場合など、ドメインにアクセスできないフェデレーション アカウントにも、この方法を使用できます。

Microsoft Entra クラウド専用 ID のユーザーまたは Microsoft Entra ハイブリッド ID を使用するユーザーで、SQL Database または SQL Managed Instance 内のデータベースに対する認証を行うには、この方法を使用します。 この方法では、ユーザーが自分の Windows 資格情報の使用を希望しているものの、そのローカル コンピューターがドメインに参加していない (リモート アクセスを使用しているなど) 場合に対応できます。 このケースでは、Windows ユーザーは、自分のドメイン アカウントとパスワードを示して、SQL Database、SQL Managed Instance、または Azure Synapse 内のデータベースに対する認証を行うことができます。

  1. SSMS または SSDT を起動し、[サーバーへの接続] (または [データベース エンジンへの接続]) ダイアログ ボックスの [認証] ボックスで、[Azure Active Directory - パスワード] を選択します。

  2. [ユーザー名] ボックスに、Microsoft Entra ユーザー名を username\@domain.com 形式で入力します。 ユーザー名は、Microsoft Entra ID のアカウント、または Microsoft Entra ID を持つマネージドまたはフェデレーション ドメイン のアカウントである必要があります。

  3. [パスワード] ボックスに、Microsoft Entra アカウントまたはマネージド/フェデレーション ドメイン アカウントのユーザー パスワードを入力します。

    Screenshot from SSMS using Microsoft Entra Password authentication.

  4. [オプション] ボタンを選択し、 [接続プロパティ] ページの [データベースへの接続] ボックスに、接続先となるユーザー データベースの名前を入力します。 (前のオプションの図を参照してください)。

Microsoft Entra ID - MFA で共通

この方法を、インタラクティブに要求されるパスワードと共に、多要素認証 (MFA) を使用した対話型認証に使用します。 この方法を使用すると、Microsoft Entra クラウド専用 ID のユーザーまたは Microsoft Entra ハイブリッド ID を使用するユーザーについて、SQL Database、SQL Managed Instance、および Azure Synapse 内のデータベースに対する認証を行うことができます。

詳細については、SQL Database と Azure Synapse での多要素 Microsoft Entra 認証の使用 (MFA の SSMS サポート)を参照してください。

Microsoft Entra ID - サービス プリンシパル

この方法を使用して、Microsoft Entra サービス プリンシパル (Microsoft Entra アプリケーション) で SQL Database または SQL Managed Instance 内のデータベースに対して認証を行います。 詳細については、「Azure SQL での Microsoft Entra のサービス プリンシパル」をご覧ください

Microsoft Entra ID - マネージド ID

この方法を使用して、Microsoft Entra マネージド ID で SQL Database または SQL Managed Instance 内のデータベースに対して認証を行います。 詳細については、「Azure SQL 用 Microsoft Entra のマネージド ID」を参照してください。

Microsoft Entra ID - 既定値

Microsoft Entra ID の既定の認証オプションを使用すると、マネージド ID を含むパスワードレスおよび非対話型認証が有効になります。

Microsoft Entra ID を使用して Azure SQL データベースの Azure portal クエリ エディターを使用して接続する

Azure SQL データベースの Azure portal クエリ エディターの詳細については、「クイック スタート: Azure portal クエリ エディターを使用して Azure SQL データベースにクエリを実行する」を参照してください。

  1. Azure portal で、SQL Database 移動します。 たとえば、Azure SQL ダッシュボードにアクセスします。

  2. Azure portalの SQL データベースの [概要] ページで、左側のメニューから [クエリ エディター] を選択します。

  3. [SQL Database クエリ エディターへようこそ] の下のサインイン画面で、[<ユーザーまたはグループ ID> として続行する] を選択します。

    Screenshot showing sign-in to the Azure portal Query editor with Microsoft Entra authentication.

Microsoft Entra ID を使用してクライアント アプリケーションから接続する

次の手順では、クライアント アプリケーションから Microsoft Entra ID を使用して SQL Database に接続する方法を示します。 これは、Microsoft Entra ID を使用する場合の認証方法の包括的な一覧ではありません。 詳細については、「Microsoft Entra 認証と SqlClient を使用して Azure SQL に接続する」を参照してください。

Microsoft Entra 統合認証

統合 Windows 認証を使用するには、ドメインのアクティブ ディレクトリが Microsoft Entra ID にフェデレーションされているか、あるいは、パススルー認証またはパスワード ハッシュ認証のシームレス シングル サインオン用に構成されたマネージド ドメインになっている必要があります。 詳細については、「Microsoft Entra シームレス シングル サインオン」を参照してください。

データベースに接続するクライアント アプリケーション (またはサービス) は、ユーザーのドメイン資格情報を使ってドメインに参加しているコンピューター上で実行されている必要があります。

統合認証と Microsoft Entra の ID を使用してデータベースに接続するには、データベース接続文字列内の Authentication キーワードを Active Directory Integrated に設定する必要があります。 <database_name> を、SQL Database の名前に置き換えます。 次の C# のコード サンプルでは、ADO .NET を使用します。

string ConnectionString = @"Data Source=<database_name>.database.windows.net; Authentication=Active Directory Integrated; Initial Catalog=testdb;";
SqlConnection conn = new SqlConnection(ConnectionString);
conn.Open();

接続文字列キーワード Integrated Security=True は、Azure SQL Database への接続ではサポートされていません。 ODBC 接続を行うには、スペースを削除して Authentication を 'ActiveDirectoryIntegrated' に設定する必要があります。

Microsoft Entra パスワード認証

Microsoft Entra クラウド専用 ID のユーザー アカウントまたは Microsoft Entra ハイブリッド ID を使用するユーザーを使ってデータベースに接続するには、Authentication キーワードを Active Directory Password に設定する必要があります。 接続文字列にユーザー ID (UID) とパスワード (PWD) のキーワードと値を含める必要があります。 <database_name><email_address><password> を適切な値に置き換えます。 次の C# のコード サンプルでは、ADO .NET を使用します。

string ConnectionString =
@"Data Source=<database_name>.database.windows.net; Authentication=Active Directory Password; Initial Catalog=testdb; UID=<email_address>; PWD=<password>";
SqlConnection conn = new SqlConnection(ConnectionString);
conn.Open();

GitHub の Microsoft Entra 認証のデモで入手できるデモ コード サンプルを使用して、Microsoft Entra の認証方法の詳細を確認してください。

Microsoft Entra ID アクセス トークン

この認証方法を使用すると、中間層サービスで、Microsoft Entra ID からトークンを取得することにより、SQL Database、SQL Managed Instance、または Azure Synapse 内のデータベースに接続するための JSON Web トークン (JWT) を取得することができます。 この方法では、証明書ベースの認証を使用したサービス ID、サービス プリンシパル、およびアプリケーションなど、さまざまなアプリケーション シナリオを実現できます。 Microsoft Entra トークンの認証を使用するには、4 つの基本的な手順を完了する必要があります。

  1. Microsoft Entra ID にアプリケーションを登録し、コードのクライアント ID を取得します。
  2. アプリケーションを表すデータベース ユーザーを作成します (上の手順 6. (「Microsoft Entra IDにマッピングされた包含ユーザーを作成する」のセクション の前半で完了しました。)
  3. アプリケーションを実行するクライアント コンピューターで証明書を作成します。
  4. アプリケーションのキーとして、証明書を追加します。

サンプルの接続文字列。 <database_name> を、お使いのデータベースの名前に置き換えます。

string ConnectionString = @"Data Source=<database_name>.database.windows.net; Initial Catalog=testdb;";
SqlConnection conn = new SqlConnection(ConnectionString);
conn.AccessToken = "Your JWT token";
conn.Open();

詳細については、「 SQL Server Security Blog (SQL Server のセキュリティに関するブログ)」をご覧ください。 証明書の追加の詳細については、「Microsoft Entra ID の証明書ベースの認証の概要」を参照してください。

sqlcmd

次のステートメントは、sqlcmd のバージョン 13.1 を使用して接続します。 Microsoft Command Line Utilities 14.0 for SQL Server をダウンロードします

Note

-G を使用する sqlcmd コマンドは、システム ID で動作しないため、ユーザー プリンシパル ログインが必要です。

sqlcmd -S Target_DB_or_DW.testsrv.database.windows.net -G
sqlcmd -S Target_DB_or_DW.testsrv.database.windows.net -U bob@contoso.com -P MyAADPassword -G -l 30

Microsoft Entra 認証のトラブルシューティング

Microsoft Entra 認証に関する問題のトラブルシューティングのガイダンスについては、「ブログ: Azure SQL DB と DW での Azure AD Authentication に関連する問題のトラブルシューティング」を参照してください。