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

適用於:Azure SQL DatabaseAzure SQL 受控執行個體Azure Synapse Analytics

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

注意

Microsoft Entra 標識符 先前稱為 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 識別碼

  1. 將您的 Azure 訂用帳戶關聯至 Microsoft Entra ID,方法是將目錄設為裝載資料庫的 Azure 訂用帳戶信任目錄。 如需詳細資訊,請參閱 將 Azure 訂用帳戶關聯或新增至您的 Microsoft Entra 租使用者

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

    重要

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

microsoft Entra admin with a server in SQL 資料庫

Azure 中的每個邏輯伺服器(裝載 SQL 資料庫 或 Azure Synapse)都會以單一伺服器管理員帳戶作為整個伺服器的系統管理員開始。 建立第二個系統管理員帳戶作為 Microsoft Entra 帳戶。 這個主體會建立為伺服器 master 資料庫中的自主資料庫使用者。 管理員 istrator 帳戶是每個使用者資料庫中db_owner角色的成員,而每個使用者資料庫會輸入為 dbo 使用者。 如需有關系統管理員帳戶的詳細資訊,請參閱管理資料庫和登入 (部分機器翻譯)。

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

注意

用戶無法根據 Microsoft Entra 帳戶(包括伺服器系統管理員帳戶)來建立 Microsoft Entra 型使用者,因為他們沒有許可權使用 Microsoft Entra 識別符來驗證建議的資料庫使用者。

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

重要

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

您可以將目錄讀取者角色指派給 Microsoft Entra ID 中的群組。 然後,群組擁有者可以將受控實例識別新增為此群組的成員,讓您為 SQL 受管理執行個體 布建 Microsoft Entra 系統管理員。 如需此功能的詳細資訊,請參閱 Microsoft Entra for Azure SQL 中的目錄讀取者角色。

您的 SQL 受管理執行個體 需要讀取 Microsoft Entra ID 的許可權,才能完成工作,例如透過安全組成員資格或建立新用戶來驗證使用者。 若要讓這項作業能夠運作,您必須授與 SQL 受管理執行個體 許可權,才能讀取 Microsoft Entra ID。 您可以使用 Azure 入口網站或 PowerShell 來執行此作業。

Azure 入口網站

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

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

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

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

    此步驟會將與 Microsoft Entra 識別符相關聯的訂用帳戶連結到 SQL 受管理執行個體,確保 Microsoft Entra 租使用者和 SQL 受管理執行個體 使用相同的訂用帳戶。

  3. 現在,您可以為您的 SQL 受管理執行個體 選擇 Microsoft Entra 系統管理員。 為此,請移至 Azure 入口網站 中的受控實例資源,然後在 [設定] 下選取 [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 標識符 ] 窗格。

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

  7. 在 [ Microsoft Entra 標識符 ] 窗格中,搜尋使用者,核取使用者或群組旁邊的方塊,以成為系統管理員,然後按 [選取 ] 以關閉窗格,然後返回受控實例的 [Microsoft Entra 管理 ] 頁面。

    [ Microsoft Entra 標識符 ] 窗格會顯示您目前目錄中的所有成員和群組。 無法選取灰色的使用者或群組,因為 Microsoft Entra 系統管理員不支援這些使用者或群組。 請參閱 Microsoft Entra 功能和限制支援的系統管理員清單。 Azure 角色型存取控制 (Azure RBAC) 只適用於 Azure 入口網站,而且不會傳播至 SQL Database、SQL 受控執行個體或 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 使用者和群組的系統管理員名稱旁邊。 對於應用程式 (服務主體),會顯示 [應用程式識別碼]。

為 SQL 受管理執行個體 布建 Microsoft Entra 系統管理員之後,您就可以開始使用 CREATE LOGIN 語法來建立 Microsoft Entra 伺服器主體 (logins)。 如需詳細資訊,請參閱 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 系統管理員的相關信息。

下列命令會取得與名為 ResourceGroup01 之資源群組相關聯之 SQL 受管理執行個體 ManagedInstance01 的 Microsoft Entra 系統管理員相關信息。

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"

下列命令會移除與資源群組 ResourceGroup01 相關聯之 SQL 受管理執行個體 ManagedInstanceName01 的 Microsoft Entra 系統管理員。

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

佈建 Microsoft Entra 系統管理員 (SQL 資料庫)

重要

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

下列兩個程序說明如何在 Azure 入口網站 中使用PowerShell為伺服器布建 Microsoft Entra 系統管理員。

Azure 入口網站

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

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

    Search for and select SQL servers.

    注意

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

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

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

  4. 在 [ Microsoft Entra 標識符 ] 頁面上,選取 [ 設定系統管理員 ] 以開啟 [ Microsoft 專案標識符 ] 窗格

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

  5. 在 [ Microsoft Entra 標識符 ] 窗格中,搜尋使用者,然後選取要成為系統管理員的使用者或群組。 使用 [選取 ] 確認您的選擇,並關閉窗格以返回邏輯伺服器的 Microsoft Entra 標識符 頁面。 (The [Microsoft Entra 標識符] 窗格會顯示您目前目錄的所有成員和群組。無法選取灰色的使用者或群組,因為 Microsoft Entra 系統管理員不支援這些使用者或群組。請參閱使用 Microsoft Entra 驗證搭配 SQL 資料庫 或 Azure SynapseMicrosoft Entra 驗證一節中支援的系統管理員清單。Azure 角色型訪問控制 (Azure RBAC) 僅適用於入口網站,且不會傳播至伺服器。

  6. 在邏輯伺服器的 [Microsoft Entra ID] 頁面頂端,選取 [儲存]。

    Screenshot shows the option to save a Microsoft Entra admin.

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

變更系統管理員的程式可能需要幾分鐘的時間。 然後,新的系統管理員會出現在 [Microsoft Entra 管理員 ] 字段中。

注意

設定 Microsoft Entra 系統管理員時,新的系統管理員名稱(使用者或群組)無法以伺服器驗證使用者的形式出現在虛擬 master 資料庫中。 如果存在,Microsoft Entra 系統管理員設定會失敗並回復,指出這類系統管理員(名稱)已經存在。 由於伺服器驗證使用者不屬於 Microsoft Entra 識別碼,因此使用 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 資料庫 和 Azure Synapse 的 Microsoft Entra 系統管理員的 Cmdlet:

Cmdlet 名稱 Description
Set-AzSqlServerActiveDirectoryAdministrator 為裝載 SQL 資料庫 或 Azure Synapse 的伺服器布建 Microsoft Entra 系統管理員。 (必須來自目前的訂用帳戶)
Remove-AzSqlServerActiveDirectoryAdministrator 拿掉裝載 SQL 資料庫 或 Azure Synapse 之伺服器的 Microsoft Entra 系統管理員。
Get-AzSqlServerActiveDirectoryAdministrator 傳回 Microsoft Entra 系統管理員目前針對裝載 SQL 資料庫 或 Azure Synapse 的伺服器所設定的資訊。

使用 PowerShell 命令 get-help 來查看這其中每個命令的詳細資訊。 例如: get-help Set-AzSqlServerActiveDirectoryAdministrator

下列腳本會在名為 Group-23 的資源群組中,為demo_server伺服器布建名為 DBA_Group40b79501-b343-44ed-9ce7-da4c8cc7353fMicrosoft Entra 系統管理員群組:

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 識別符顯示名稱。

注意

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 管理員 istrator。 如需詳細資訊,請參閱 Azure SQL Database 之 Azure SQL Database 作業的 Service Management REST API 參考和作業

設定用戶端電腦

注意

System.Data.SqlClient 會使用已被取代的 Azure Active Directory 驗證連結庫 (ADAL)。 如果您使用 System.Data.SqlClient 命名空間進行 Microsoft Entra 驗證,請將應用程式遷移至 Microsoft.Data.SqlClientMicrosoft 驗證連結庫 (MSAL)。 如需詳細資訊,請參閱 搭配 SqlClient 使用 Microsoft Entra 驗證。

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

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

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

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

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

  • 使用 SQL 資料庫 和 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 伺服器主體 (logins) 的語法,請參閱 CREATE LOGIN

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

  • 您無法針對與 Azure 訂用帳戶相關聯的身分識別,直接建立受控於不同 Microsoft Entra 租使用者的資料庫使用者。 不過,其他目錄中的使用者可以匯入至相關聯的目錄做為外部使用者。 然後,他們可以用來建立可存取 SQL 資料庫的自主資料庫使用者。 外部使用者也可以透過包含資料庫使用者的 Microsoft Entra 群組成員資格來取得存取權。

  • 不支援在 T-SQL CREATE LOGINCREATE USER 語句中包含為用戶名稱的特殊字元,例如冒號:或連&字元。

重要

不支援屬於 2048 個以上 Microsoft Entra 安全組成員的 Microsoft Entra 使用者和服務主體,無法在 SQL 資料庫、SQL 受管理執行個體 或 Azure Synapse 中登入資料庫。

若要建立以 Microsoft Entra ID 為基礎的自主資料庫使用者(非擁有資料庫的伺服器管理員),請以至少 ALTER ANY USER 許可權的使用者身分識別連接到資料庫。 在下列 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 需要代表登入的使用者存取 Microsoft Entra ID (外部提供者)。 有時候,會導致 Microsoft Entra ID 將例外狀況傳回 SQL 的情況。

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

重要

拿掉伺服器的 Microsoft Entra 系統管理員可防止任何 Microsoft Entra 驗證使用者連線到伺服器。 如有必要,SQL 資料庫 系統管理員可以手動卸除無法使用的 Microsoft Entra 使用者。

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

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 (SSMS) 或 SQL Server Database Tools (SSDT) 連線至 microsoft Entra 身分識別 SQL 資料庫。

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 主體名稱連線時,請使用這個方法。 您也可以將其用於沒有網域存取權的同盟帳戶,例如在遠端工作時。

使用此方法向 SQL 資料庫 中的資料庫進行驗證,或使用 Microsoft Entra 混合式身分識別的使用者或使用 Microsoft Entra 混合式身分識別的用戶進行 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 帳戶或受控/同盟網域帳戶的用戶密碼。

    Screenshot from SSMS using Microsoft Entra Password authentication.

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

Microsoft Entra ID - 通用 MFA

使用此方法以多重要素驗證進行互動式驗證 (MFA),並透過互動方式要求密碼。 這個方法可用來向 SQL 資料庫、SQL 受管理執行個體 和適用於 Microsoft Entra 僅限雲端身分識別使用者的 Azure Synapse 或使用 Microsoft Entra 混合式身分識別的用戶進行驗證。

如需詳細資訊,請參閱搭配 SQL 資料庫 和 Azure Synapse 使用多重要素 Microsoft Entra 驗證(MFA 的 SSMS 支援)。

Microsoft Entra ID - 服務主體

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

Microsoft Entra ID - 受控識別

使用此方法向 SQL 資料庫 中的資料庫進行驗證,或使用 Microsoft Entra 受控識別進行 SQL 受管理執行個體。 如需詳細資訊,請參閱 Microsoft Entra for Azure SQL 中的受控識別。

Microsoft Entra ID - 預設值

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

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

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

  1. 流覽至 Azure 入口網站 中的 SQL 資料庫。 例如,請流覽 您的 Azure SQL 儀錶板

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

  3. 在 [歡迎使用 SQL 資料庫 查詢編輯器 的登入畫面上,選取 [繼續] 作為<您的使用者或群組標識碼>

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

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

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

Microsoft Entra 整合式驗證

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

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

若要使用整合式驗證和 Microsoft Entra 身分識別連線到資料庫,資料庫 連接字串 中的 Authentication 關鍵詞必須設定為 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。 連接字串必須包含使用者識別碼 (UID) 及密碼 (PWD) 關鍵字和值。 將、 <email_address><password> 取代<database_name>為適當的值。 下列 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 存取令牌

此驗證方法可讓仲介層服務透過從 Microsoft Entra ID 取得令牌,以取得 JSON Web 令牌 (JWT) 以連線到 SQL 資料庫、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 版進行連線。 下載 Microsoft 命令行公用程式 14.0 for SQL Server

注意

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