共用方式為


使用 Azure SQL 設定和管理 Microsoft Entra 驗證

適用於:Azure SQL 資料庫 Azure SQL 受控執行個體 Azure Synapse Analytics

本文說明如何建立並填入 Microsoft Entra 租用戶,然後搭配 Azure SQL 資料庫Azure SQL 受控執行個體Azure Synapse Analytics 使用 Microsoft Entra ID (先前稱為 Azure Active Directory)。 如需概觀,請參閱 Microsoft Entra 驗證

注意

Microsoft Entra ID 先前稱為 Azure Active Directory (Azure AD)。

Microsoft Entra 驗證方法

Microsoft Entra ID 支援下列驗證方法:

  • 僅限 Microsoft Entra 雲端的身分識別
  • 支援下列專案的 Microsoft Entra 混合式身分識別:
    • 具有兩個選項且與無縫單一登入 (SSO) 結合的雲端驗證
      • Microsoft Entra 密碼雜湊驗證
      • Microsoft Entra 傳遞驗證
    • 同盟驗證

如需 Microsoft Entra 驗證方法以及要選擇哪一個方法的詳細資訊,請參閱針對 Microsoft Entra 混合式身分識別解決方案選擇正確的驗證方法 (部分機器翻譯)。

如需 Microsoft Entra 混合式身分識別、設定與同步的詳細資訊,請參閱:

建立並填入 Microsoft Entra 租用戶

建立 Microsoft Entra 租用戶並填入使用者和群組。 Microsoft Entra 租用戶可以完全在 Azure 內管理,或用於內部部署的 Active Directory 網域服務同盟。

如需詳細資訊,請參閱

將 Azure 訂用帳戶關聯或新增至 Microsoft Entra ID

  1. 讓目錄成為託管資料庫之 Azure 訂用帳戶信任的目錄,以將 Azure 訂用帳戶與 Microsoft Entra ID 關聯。 如需詳細資料,請參閱將 Azure 訂用帳戶關聯或新增至 Microsoft Entra 租用戶

  2. 使用 Azure 入口網站中的目錄切換器,切換至與網域關聯的訂用帳戶。

    重要

    每個 Azure 訂用帳戶都與 Microsoft Entra 執行個體有信任關係。 它信任該目錄來驗證使用者、服務和裝置。 多個訂用帳戶可以信任相同的目錄,但是一個訂用帳戶只能信任一個目錄。 這個訂用帳戶與目錄之間存在的信任關係不同於訂用帳戶與所有其他 Azure 資源 (網站、資料庫等) 之間的關係,後者比較像是訂用帳戶的子資源。 如果訂用帳戶已過期,則也會停止存取與該訂用帳戶相關聯的其他資源。 但是,目錄會保留在 Azure 中,而且您可以將其他訂用帳戶與該目錄產生關聯,並繼續管理目錄使用者。 如需有關資源的詳細資訊,請參閱 了解 Azure 中的資源存取。 若要深入了解此信任關係,請參閱如何將 Azure 訂用帳戶關聯或新增至 Microsoft Entra ID

在 SQL Database 中有伺服器的 Microsoft Entra 管理員

Azure 中的每部邏輯伺服器 (其託管 SQL Database 或 Azure Synapse) 一開始只有單一伺服器管理員帳戶,該帳戶為整部伺服器的管理員。 將第二個管理員帳戶建立為 Microsoft Entra 帳戶。 這個主體會建立為伺服器 master 資料庫中的自主資料庫使用者。 管理員帳戶是在每個使用者資料庫中擔任 db_owner 角色的成員,並以 dbo 使用者的身分進入每個使用者資料庫。 如需有關管理員帳戶的詳細資訊,請參閱管理資料庫和登入 (部分機器翻譯)。

在搭配使用 Microsoft Entra ID 與異地複寫時,必須為主要和次要伺服器設定 Microsoft Entra 管理員。 如果伺服器沒有 Microsoft Entra 管理員,則 Microsoft Entra 登入和使用者會收到 Cannot connect 伺服器錯誤。

注意

不是以 Microsoft Entra 帳戶 (包括伺服器管理員帳戶) 為基礎的使用者無法建立以 Microsoft Entra 為基礎的使用者,因為他們沒有權限使用 Microsoft Entra ID 驗證建議的資料庫使用者。

佈建 Microsoft Entra 管理員 (SQL 受控執行個體)

重要

只有當您佈建的是 Azure SQL 受控執行個體時,才需遵循這些步驟。 此作業只能由全域系統管理員或 Microsoft Entra ID 中的特殊權限角色管理員執行。

在 Microsoft Entra ID 中,您可以將 [目錄讀取者] 角色指派給群組。 然後,群組擁有者可以將受控執行個體身分識別新增為此群組的成員,這可讓您針對 SQL 受控執行個體佈建 Microsoft Entra 管理員。 如需這項功能的詳細資訊,請參閱 Microsoft Entra 中適用於 Azure SQL 的目錄讀取者角色

您的 SQL 受控執行個體需要有讀取 Microsoft Entra ID 的權限,才能順利完成工作,例如,透過安全性群組成員資格來驗證使用者,或是建立新使用者。 若要這樣做,您必須為 SQL 受控執行個體授與讀取 Microsoft Entra ID 的權限。 您可以使用 Azure 入口網站或 PowerShell 來執行此作業。

Azure 入口網站

若要使用 Azure 入口網站來為 SQL 受控執行個體授與 Microsoft Entra ID 讀取權限,請以全域系統管理員身分登入並遵循下列步驟:

  1. Azure 入口網站中,在右上角選取您的帳戶,然後選擇 [切換目錄] 以確認哪個目錄是您目前的目錄。 視需要切換目錄。

    Azure 入口網站的螢幕擷取畫面,其中顯示要切換目錄的位置。

  2. 選擇正確的 Microsoft Entra 目錄作為目前的目錄

    此步驟將與 Microsoft Entra ID 關聯的訂用帳戶連結至 SQL 受控執行個體,確定 Microsoft Entra 租用戶和 SQL 受控執行個體使用相同的訂用帳戶。

  3. 現在,您可以為 SQL 受控執行個體選擇 Microsoft Entra 管理員。 為此,請移至 Azure 入口網站 中的受控執行個體資源,然後在 [設定] 下選取 [Microsoft Entra 管理員]

    Azure 入口網站的螢幕擷取畫面,其中顯示針對所選 SQL 受控執行個體開啟的 Microsoft Entra 管理頁面。

  4. 選取 Active Directory 管理員頁面頂端的橫幅,並對目前的使用者授與權限。

    用來將權限授與 SQL 受控執行個體以存取 Microsoft Entra ID 之對話方塊的螢幕擷取畫面,其中已選取 [授與權限] 按鈕。

  5. 作業成功之後,右上角就會出現下列通知:

    通知的螢幕擷取畫面,確認受控執行個體已成功更新 Microsoft Entra ID 讀取權限。

  6. [Microsoft Entra 管理員] 頁面上,從導覽列選取 [設定管理員] 以開啟 [Microsoft Entra ID] 窗格。

    此螢幕擷取畫面顯示所選 SQL 受控執行個體的 [Microsoft Entra 管理員] 頁面上醒目提示的 [設定管理員] 命令。

  7. [Microsoft Entra ID] 窗格中,搜尋使用者,核取使用者或群組旁邊的方塊,讓其成為管理員,按 [選取] 關閉窗格,然後返回受控執行個體的 [Microsoft Entra 管理員] 頁面。

    [Microsoft Entra ID] 窗格會顯示您目前目錄中的所有成員和群組。 呈現灰色的使用者或群組無法選取,因為他們不受支援成為 Microsoft Entra 管理員。 請參閱 Microsoft Entra 功能和限制中支援的管理員清單。 Azure 角色型存取控制 (Azure RBAC) 只適用於 Azure 入口網站,而且不會傳播至 SQL Database、SQL 受控執行個體或 Azure Synapse。

  8. 從受控執行個體的 [Microsoft Entra 管理員] 頁面導覽列中,選取 [儲存] 以確認您的 Microsoft Entra 管理員。

    Microsoft Entra 管理員頁面的螢幕擷取畫面,其中 [設定管理員] 和 [移除管理員] 按鈕旁頂端列的 [儲存] 按鈕。

    變更管理員的程序可能需要幾分鐘的時間。 然後,新的管理員就會出現在 [Active Directory 管理員] 方塊中。

    [物件識別碼] 顯示在 Microsoft Entra 使用者和群組的管理員名稱旁邊。 對於應用程式 (服務主體),會顯示 [應用程式 ID]。

為 SQL 受控執行個體佈建 Microsoft Entra 管理員之後,就可以開始使用 CREATE LOGIN 語法來建立 Microsoft Entra 伺服器主體 (登入)。 如需詳細資訊,請參閱 SQL 受控執行個體概觀 (部分機器翻譯)。

提示

若稍後要移除管理員,請在 [Microsoft Entra 管理員] 頁面頂端,選取 [移除管理員],然後選取 [儲存]

PowerShell

若要使用 PowerShell 將讀取權限授與 SQL 受控執行個體 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 受控執行個體的 PowerShell

若要執行 PowerShell Cmdlet,Azure PowerShell 必須已安裝且正在執行中。 如需詳細資訊,請參閱如何安裝和設定 Azure PowerShell

重要

Azure SQL 受控執行個體仍然支援 PowerShell Azure Resource Manager (RM) 模組,但所有未來的開發都是針對 Az.Sql 模組。 AzureRM 模組至少在 2020 年 12 月之前將持續收到錯誤修復。 Az 模組和 AzureRm 模組中命令的引數本質上完全相同。 如需其相容性的詳細資訊,請參閱新的 Azure PowerShell Az 模組簡介

若要佈建 Microsoft Entra 管理員,請執行下列 Azure PowerShell 命令:

  • Connect-AzAccount
  • Select-AzSubscription

下表列出用來佈建及管理 SQL 受控執行個體之 Microsoft Entra 管理員的 Cmdlet:

Cmdlet 名稱 Description
Set-AzSqlInstanceActiveDirectoryAdministrator 在目前的訂用帳戶中,針對 SQL 受控執行個體佈建 Microsoft Entra 管理員。 (必須來自目前的訂用帳戶)
Remove-AzSqlInstanceActiveDirectoryAdministrator 在目前的訂用帳戶中,針對 SQL 受控執行個體移除 Microsoft Entra 管理員。
Get-AzSqlInstanceActiveDirectoryAdministrator 在目前的訂用帳戶中,針對 SQL 受控執行個體傳回有關 Microsoft Entra 管理員的資訊。

下列命令會針對名為 ManagedInstance01 的 SQL 受控執行個體取得 Microsoft Entra 管理員的相關資訊,此執行個體與名為 ResourceGroup01 的資源群組相關聯。

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

下列命令會針對名為 ManagedInstance01 的 SQL 受控執行個體,佈建名為 DBA 的 Microsoft Entra 管理員群組。 此伺服器與資源群組 ResourceGroup01 相關聯。

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

下列命令會針對名為 ManagedInstanceName01 的 SQL 受控執行個體移除 Microsoft Entra 管理員,此執行個體與資源群組 ResourceGroup01 相關聯。

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

佈建 Microsoft Entra 管理員 (SQL Database)

重要

若要針對 SQL Database 或 Azure Synapse 佈建伺服器,只需遵循下列步驟。

下列兩個程序示範如何在 Azure 入口網站中以及使用 PowerShell,針對伺服器佈建 Microsoft Entra 管理員。

Azure 入口網站

  1. Azure 入口網站的右上角,選取您的帳戶,然後選擇 [切換目錄] 以開啟 [目錄 + 訂用帳戶] 頁面。 選擇 Microsoft Entra 目錄,其中包含您的 Azure SQL 資料庫或 Azure Synapse Analytics 作為目前的目錄

  2. 搜尋 SQL Server,然後選取 Azure SQL 資料庫的邏輯伺服器。

    搜尋並選取 [SQL 伺服器]。

    注意

    在此頁面上,於選取 [SQL Server] 之前,您可以選取名稱旁的星星將該類別設為「我的最愛」,並將 [SQL Server] 新增至左側的導覽功能表。

    也請考慮瀏覽您的 Azure SQL 儀表板

  3. 在 [SQL Server] 頁面上,選取 [Microsoft Entra ID]。

  4. 在 [Microsoft Entra ID] 頁面上,選取 [設定管理員] 以開啟 [Microsoft Entra ID] 窗格

    螢幕擷取畫面顯示設定 SQL Server Microsoft Entra 管理員的選項。

  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] 頁面頂端,選取 [儲存]

    螢幕擷取畫面顯示儲存 Microsoft Entra 管理員的選項。

    [物件識別碼] 顯示在 Microsoft Entra 使用者和群組的管理員名稱旁邊。 對於應用程式 (服務主體),會顯示 [應用程式 ID]。

變更管理員的程序可能需要幾分鐘的時間。 然後,新的管理員會顯示在 [Microsoft Entra 管理員] 欄位。

注意

設定 Microsoft Entra 管理員時,新的管理員名稱 (使用者或群組) 不得以伺服器驗證使用者的身分存在於虛擬的 master 資料庫中。 如果存在,此設定會失敗並復原變更,表示這樣的管理員 (名稱) 已經存在。 由於伺服器驗證使用者不屬於 Microsoft Entra ID,因此使用 Microsoft Entra 驗證連線到伺服器的所有努力都會失敗。

若要稍後移除管理員,請在 [Microsoft Entra ID] 頁面頂端選取 [移除管理員],然後選取 [儲存] 這會停用您的邏輯伺服器的 Microsoft Entra 驗證。

適用於 SQL Database 和 Azure Synapse 的 PowerShell

若要執行 PowerShell Cmdlet,Azure PowerShell 必須已安裝且正在執行中。 如需詳細資訊,請參閱如何安裝和設定 Azure PowerShell。 若要佈建 Microsoft Entra 管理員,請執行下列 Azure PowerShell 命令:

  • Connect-AzAccount
  • Select-AzSubscription

針對 SQL Database 與 Azure Synapse 用來佈建及管理 Microsoft Entra 管理員的 Cmdlet:

Cmdlet 名稱 Description
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 (物件識別碼40b79501-b343-44ed-9ce7-da4c8cc7353f) 的 Microsoft Entra 管理員群組:

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

DisplayName 輸入參數可接受 Microsoft Entra 顯示名稱或 [使用者主體名稱]。 例如,DisplayName="John Smith"DisplayName="johns@contoso.com"。 針對 Microsoft Entra 群組,僅支援 Microsoft Entra ID 顯示名稱。

注意

Azure PowerShell 命令 Set-AzSqlServerActiveDirectoryAdministrator 不會阻止您針對不支援的使用者佈建 Microsoft Entra 管理員。 可以佈建不支援的使用者,但該使用者無法連線到資料庫。

下列範例使用選用的 ObjectID

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

注意

DisplayName 並非唯一時,就需要 ObjectID。 若要擷取 ObjectIDDisplayName 的值,可以在 Azure 入口網站的 [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"

注意

也可以使用 REST API 佈建 Microsoft Entra 管理員。 如需詳細資訊,請參閱 Azure SQL 資料庫之 Azure SQL 資料庫作業的 Service Management REST API 參考和作業

設定用戶端電腦

注意

System.Data.SqlClient 使用 Azure Active Directory 驗證程式庫 (ADAL),其即將淘汰。 如果使用 System.Data.SqlClient 命名空間進行 Microsoft Entra 驗證,請將應用程式移轉至 Microsoft.Data.SqlClientMicrosoft Authentication Library (MSAL)。 如需詳細資訊,請參閱對 SqlClient 使用 Microsoft Entra 驗證

如果想要在應用程式中繼續使用 ADAL.DLL,可以使用本節中的連結來安裝最新的 ODBC 或 OLE DB 驅動程式,其中包含最新的 ADAL.DLL 程式庫。

在您的應用程式或使用者使用 Microsoft Entra 身分識別連線到 SQL Database 或 Azure Synapse 的所有用戶端電腦上,您必須安裝下列軟體:

您可以符合這些需求,方法如下︰

建立對應至 Microsoft Entra 身分識別的自主使用者

本節檢閱搭配 Azure SQL 資料庫、Azure SQL 受控執行個體 和 Azure Synapse 使用 Microsoft Entra 驗證的需求和重要考量。

  • 使用 SQL Database 和 Azure Synapse 的 Microsoft Entra 驗證需要根據 Microsoft Entra 身分識別使用自主資料庫使用者。 自主資料庫使用者在 master 資料庫中沒有登入,而且會對應至與資料庫相關聯 Microsoft Entra 目錄中的身分識別。 Microsoft Entra 身分識別可以是個別使用者帳戶、群組或應用程式。 如需有關自主資料庫使用者的詳細資訊,請參閱 自主資料庫使用者 - 使資料庫可攜。 如需有關根據 Microsoft Entra 身分識別建立自主資料庫使用者的詳細資訊,請參閱 CREATE USER (Transact-SQL)

  • 由於 SQL 受控執行個體支援 Microsoft Entra 伺服器主體 (登入),因此,不需要使用自主資料庫使用者。 這樣,您可以從 Microsoft Entra 使用者、群組或應用程式建立登入。 這表示您可以使用 Microsoft Entra 伺服器登入 (而不是自主資料庫使用者),向 SQL 受控執行個體進行驗證。 如需詳細資訊,請參閱 SQL 受控執行個體概觀 (部分機器翻譯)。 如需建立 Microsoft Entra 伺服器主體 (登入) 的語法,請參閱 CREATE LOGIN

  • 無法使用 Azure 入口網站建立資料庫使用者 (管理員除外)。 Microsoft Entra 角色不會傳播至 SQL Database、SQL 受控執行個體或 Azure Synapse 中的資料庫。 Microsoft Entra 角色管理 Azure 資源,且不適用於資料庫權限。 例如,SQL Server 參與者角色不會授與連線到 SQL Database、SQL 受控執行個體或 Azure Synapse 中之資料庫的存取權。 存取權限必須使用 Transact-SQL 陳述式直接在資料庫中授與。

  • 不能直接為在不同的 Microsoft Entra 租用戶 (而不是與 Azure 訂用帳戶相關聯的身分識別) 中管理的身分識別建立資料庫使用者。 不過,其他目錄中的使用者可以匯入至相關聯的目錄作為外部使用者。 然後,可以使用它們來建立可存取 SQL Database 的自主資料庫使用者。 外部使用者也可以在包含資料庫使用者的 Microsoft Entra 群組中取得成員資格,從而取得存取權。

  • 不支援在 T-SQL CREATE LOGINCREATE USER 陳述式中當成使用者名稱包括的特殊字元 (例如冒號 : 或 & 符號 &)。

重要

如果 Microsoft Entra 使用者和服務主體 (Microsoft Entra 應用程式) 屬於超過 2048 位成員的 Microsoft Entra 安全性群組,則不支援其登入 SQL Database、SQL 受控執行個體或 Azure Synapse 中的資料庫。

若要建立以 Microsoft Entra 為基礎的自主資料庫使用者 (而非擁有資料庫的伺服器管理員),請以至少具有 ALTER ANY USER 權限的使用者身分,使用 Microsoft Entra 身分識別來連線到資料庫。 在下列 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 (「外部提供者」)。 有時,會發生導致 Microsoft Entra ID 將例外狀況傳回 SQL 的情況。

  • 您可能會遇到 SQL 錯誤 33134,其中包含特定於 Microsoft Entra ID 的錯誤訊息。 此錯誤通常指出存取被拒、使用者必須註冊 MFA 才能存取資源,或者必須透過預先授權來處理第一方應用程式之間的存取。 在前兩種情況下,此問題通常會由使用者的 Microsoft Entra 租用戶中設定的條件式存取原則所導致:其防止使用者存取外部提供者。 更新條件式存取原則以允許存取應用程式 '00000003-0000-0000-c000-000000000000' (Microsoft Graph API 的應用程式 ID),應該就能解決此問題。 如果錯誤指出必須透過預先授權來處理第一方應用程式之間的存取,則此問題的原因是使用者以服務主體的身分登入。 如果使用者改為執行命令,則其應該會成功。
  • 如果您收到連線逾時過期,您可能需要將連接字串的 TransparentNetworkIPResolution 參數設定為 false。 如需詳細資訊,請參閱 .NET Framework 4.6.1 的連線逾時問題 - TransparentNetworkIPResolution

重要

針對伺服器移除 Microsoft Entra 管理員,可防止任何 Microsoft Entra 驗證使用者連線到伺服器。 如有必要,SQL Database 管理員可以手動刪除無法使用的 Microsoft Entra 使用者。

當您建立資料庫使用者時,該使用者會獲得 CONNECT 權限,而可以用 PUBLIC 角色的成員身分連線到該資料庫。 一開始,使用者可用的唯一權限被授與 PUBLIC 角色以及他們所屬的任何 Microsoft Entra 群組。 將權限授與以 Microsoft Entra 為基礎的自主資料庫使用者的方式,與將權限授與任何其他類型使用者的方式相同。 建議向資料庫角色授與權限並將使用者新增至這些角色,而不是直接向個別使用者授與權限。 如需詳細資訊,請參閱 Database Engine 權限基本概念。 如需有關特殊 SQL Database 角色的詳細資訊,請參閱 管理 Azure SQL 資料庫的資料庫和登入。 以外部使用者身分匯入至管理網域的同盟網域使用者帳戶必須使用受控網域身分識別。

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 身分識別連線到資料庫。

使用 Microsoft Entra 身分識別來使用 SSMS 或 SSDT 連線

下列程序示範如何使用 SQL Server Management Studio 或 SQL Server Database Tools,利用 Microsoft Entra 身分識別連線到 SQL Database。

Microsoft Entra ID - 整合式

如果您用來登入 Windows 的 Microsoft Entra 認證來自同盟網域,或是來自針對以傳遞驗證和密碼雜湊驗證進行無縫單一登入所設定的受控網域,請使用此方法。 如需詳細資訊,請參閱 Microsoft Entra 無縫單一登入

  1. 啟動 SSMS or SSDT,並在 [連線到伺服器] (或 [連線到資料庫引擎]) 對話方塊的 [驗證] 方塊中,選取 [Azure Active Directory - 整合式]。 不需要輸入密碼,因為您現有的認證已用於連線。

    SSMS 的螢幕擷取畫面,其中顯示 Microsoft Entra 整合式驗證。

  2. 選取 [選項] 按鈕,然後在 [連線屬性] 頁面的 [連線到資料庫] 方塊中,鍵入您想要連線的使用者資料庫名稱。

    SSMS 中 [選項] 功能表的螢幕擷取畫面。

Microsoft Entra ID - 密碼

當使用 Microsoft Entra 受控網域與 Microsoft Entra 主體名稱連線時,使用此方法。 您也可以將其用於沒有網域存取權的同盟帳戶,例如在遠端工作時。

使用此方法,利用 Microsoft Entra 僅雲端的身分識別使用者,或使用 Microsoft Entra 混合式身分識別的使用者,在 SQL Database 或 SQL 受控執行個體中驗證資料庫。 此方法支援想要使用其 Windows 認證,但其本機電腦並未加入網域 (例如使用遠端存取) 的使用者。 在此情況下,Windows 使用者可以指出其網域帳戶和密碼,而且可向 SQL Database、SQL 受控執行個體或 Azure Synapse 中的資料庫進行驗證。

  1. 啟動 SSMS 或 SSDT,並在 [連線到伺服器] (或 [連線到資料庫引擎]) 對話方塊的 [驗證] 方塊中,選取 [Azure Active Directory - 密碼]。

  2. 在 [使用者名稱] 方塊中,以 username\@domain.com 格式輸入您的 Microsoft Entra 使用者名稱。 使用者名稱必須是來自 Microsoft Entra ID 的帳戶,或來自具有 Microsoft Entra ID 的受控或同盟網域的帳戶。

  3. 在 [密碼] 方塊中,針對 Microsoft Entra 帳戶或受控/同盟網域帳戶輸入您的使用者密碼。

    SSMS 中使用 Microsoft Entra 密碼驗證的螢幕擷取畫面。

  4. 選取 [選項] 按鈕,然後在 [連線屬性] 頁面的 [連線到資料庫] 方塊中,鍵入您想要連線的使用者資料庫名稱。 (請參閱上一個選項中的圖形。)

Microsoft Entra ID - 與 MFA 通用

使用此方法進行採用多重要素驗證 (MFA) 的互動式驗證,並以互動方式要求密碼。 此方法可利用 Microsoft Entra 僅雲端的身分識別使用者,或使用 Microsoft Entra 混合式身分識別的使用者,用來驗證 SQL Database、SQL 受控執行個體和 Azure Synapse 中的資料庫。

如需詳細資訊,請參閱對 SQL Database 和 Azure Synapse 使用多重要素 Microsoft Entra 驗證 (對 MFA 的 SSMS 支援) (部分機器翻譯)。

Microsoft Entra - 服務主體

使用此方法透過 Microsoft Entra 服務主體 (Microsoft Entra 應用程式),向 SQL Database 或 SQL 受控執行個體中的資料庫進行驗證。 如需詳細資訊,請參閱使用 Azure SQL 的 Microsoft Entra 服務主體

Microsoft Entra ID - 受控識別

使用這個方法,透過 Microsoft Entra 受控識別向 SQL Database 或 SQL 受控執行個體中的資料庫進行驗證。 如需詳細資訊,請參閱適用於 Azure SQL 的 Microsoft Entra中的受控身分識別

Microsoft Entra ID - 預設值

使用 Microsoft Entra ID 的預設驗證選項,可透過無密碼和非互動式機制 (包括受控識別) 進行驗證。

透過適用於 Azure SQL 資料庫的 Azure 入口網站查詢編輯器,使用 Microsoft Entra 身分識別進行連線

如需 Azure SQL 資料庫Azure 入口網站查詢編輯器的詳細資訊,請參閱快速入門:使用 Azure 入口網站查詢編輯器來查詢 Azure SQL 資料庫

  1. 在 Azure 入口網站中,瀏覽至您的 SQL Database。 例如,瀏覽您的 Azure SQL 儀表板

  2. Azure 入口網站 SQL Database 的 [概觀] 頁面上,選取左側功能表中的 [查詢編輯器]。

  3. 在 [歡迎使用 SQL Database 查詢編輯器] 下的 [登入] 畫面上,選取 [繼續作為<您的使用者或群組 ID>]

    顯示使用 Microsoft Entra 驗證登入 Azure 入口網站查詢編輯器的螢幕擷取畫面。

使用 Microsoft Entra 身分識別從用戶端應用程式連線

下列程序示範如何從用戶端應用程式,使用 Microsoft Entra 身分識別連線到 SQL Database。 使用 Microsoft Entra 身分識別時,這不是完整的驗證方法清單。 如需詳細資訊,請參閱使用 Microsoft Entra 驗證和 SqlClient 連線到 Azure SQL

Microsoft Entra 整合式驗證

若要使用整合式 Windows 驗證,網域的 Active Directory 必須與 Microsoft Entra ID 同盟,或者必須是針對以傳遞或密碼雜湊驗證進行無縫單一登入所設定的受控網域。 如需詳細資訊,請參閱 Microsoft Entra 無縫單一登入

連線到資料庫的用戶端應用程式 (或服務) 必須以使用者的網域認證,在已加入網域的機器上執行。

若要使用整合式驗證和 Microsoft Entra 身分識別連線到資料庫,資料庫連接字串中的驗證關鍵字必須設定為 Active Directory Integrated。 將 <database_name> 取代為您的資料庫名稱。 下列 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 資料庫。 建立 ODBC 連線時,您必須移除空格,並將驗證設為 ActiveDirectoryIntegrated

Microsoft Entra 密碼驗證

若要使用 Microsoft Entra 僅雲端的身分識別使用者帳戶,或使用 Microsoft Entra 混合式身分識別的使用者帳戶,連線到資料庫,則必須將驗證關鍵字設定為 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();

深入了解使用 Microsoft Entra 驗證 GitHub 示範上所提供之示範程式碼範例的 Microsoft Entra 驗證方法。

Microsoft Entra ID 存取權杖

此驗證方法可讓中介層服務取得 JSON Web 權杖 (JWT),透過從 Microsoft Entra ID 取得權杖,以連線到 SQL Database、SQL 受控執行個體或 Azure Synapse 中的資料庫。 此方法使用以憑證為基礎的驗證來啟用各種應用程式案例,包括服務身分識別、服務主體和應用程式。 您必須完成四個基本步驟,才能使用 Microsoft Entra 權杖驗證︰

  1. 向 Microsoft Entra ID 註冊您的應用程式,並取得程式碼的用戶端識別碼。
  2. 建立代表應用程式的資料庫使用者。 (已於稍早在建立對應至 Microsoft Entra 身分識別的自主使用者章節中完成。)
  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 安全性部落格。 如需新增認證的詳細資訊,請參閱開始在 Microsoft Entra ID 中使用以認證為基礎的驗證

sqlcmd

下列陳述式使用 sqlcmd 13.1 版連線。 下載適用於 SQL Server 的 Microsoft 命令列公用程式 14.0

注意

搭配 -G 命令的 sqlcmd 無法搭配系統身分識別運作,而且需要使用者主體登入。

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 驗證的相關問題進行疑難排解