用 Azure Synapse Analytics 配置與管理 Microsoft Entra 認證

本文將教你如何使用 Microsoft Entra ID 進行驗證,以存取 Azure Synapse Analytics。

注意

Microsoft Entra server principals 目前正在 Azure Synapse Analytics 中預覽。

Prerequisites

要使用 Microsoft Entra 認證搭配 Azure Synapse Analytics,您需要以下先決條件:

  • 一個由使用者和群組填充的 Microsoft Entra 租戶。
  • 一個現有的 Azure Synapse 工作空間或獨立專用 SQL 池。

建立並設定 Microsoft Entra 租戶

在你為 Azure Synapse Analytics 設定 Microsoft Entra 認證之前,你需要建立一個 Microsoft Entra 租戶,並將使用者和群組加入其中。 你可以完全在 Azure 內管理 Microsoft Entra 租戶,或用它們來做為內部部署 Active Directory 網域 Service 的同盟。

欲了解更多資訊,請參閱:

設定 Microsoft Entra 管理員

要使用 Microsoft Entra 認證,您的 Azure Synapse 資源需要一個 Microsoft Entra 管理員。

你也可以在建立資源時設定 Microsoft Entra 管理員。 如果已經設定好管理員,請跳過這部分。

Azure Synapse 工作區

對於 Azure Synapse 工作空間,請在工作空間上設定 Microsoft Entra 管理員。 欲了解更多資訊,請參閱 管理員結構。

獨立專用 SQL 池

當你設定 Microsoft Entra 管理員時,你會啟用架設獨立專用 SQL 池之邏輯伺服器的 Microsoft Entra 認證。 你可以透過 Azure 入口網站、PowerShell、Azure CLI 或 REST API 來設定管理員。

在Azure入口網站中,你可以找到 logical server 名稱

  • 在 Azure Synapse Analytics 獨立專用 SQL 池的概覽頁面中的「伺服器名稱」欄位中。

要在 Azure 入口網站中為您的邏輯伺服器設定 Microsoft Entra 管理員,請遵循以下步驟:

  1. 在 Azure 入口網站的 目錄 + 訂閱 窗格中,選擇包含你 Azure Synapse 資源的目錄作為目前目錄。

  2. 搜尋 SQL 伺服器,然後選擇您專用 SQL 集區的邏輯伺服器,以開啟 SQL 伺服器 窗格。

  3. 在邏輯伺服器的 SQL 伺服器 窗格中,在設定下選擇 Microsoft Entra ID 以開啟 Microsoft Entra ID 窗格。

  4. 在 Microsoft Entra ID 面板中,選擇 Set admin 以開啟 Microsoft Entra ID 面板。

  5. Microsoft Entra ID 面板顯示你目前目錄中的所有使用者、群組和應用程式,並允許你依名稱、別名或 ID 搜尋。 尋找您想要的 Microsoft Entra 系統管理員身分識別並選取它,然後選取 [ 選取 ] 以關閉窗格。

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

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

變更管理員的程序可能需要幾分鐘的時間。 接著新管理員會出現在 Microsoft Entra admin 欄位。

要移除管理員,請在Microsoft Entra ID頁面頂端選擇Remove admin,然後選擇Save。 移除 Microsoft Entra 管理員會讓你的邏輯伺服器無法使用 Microsoft Entra 認證。

注意

Microsoft Entra管理員會以使用者(資料庫主體)身份儲存在伺服器的 master 資料庫中。 由於資料庫主體名稱必須是唯一的,因此管理員的顯示名稱不能與伺服器的 master 資料庫中任何使用者的名稱相同。 如果已有該名稱的使用者存在,Microsoft Entra 管理員設定將會失敗並回復到先前狀態,指出該名稱已被使用。

指派 Microsoft Graph 權限

對於某些操作,Azure Synapse Analytics 需要查詢 Microsoft Graph 的權限,詳見 Microsoft Graph 權限。 Azure Synapse Analytics 支援對資源識別身分具有細粒度的 Microsoft 圖形 API 權限,例如 User.Read.All、GroupMember.Read.All,以及 Application.Read.All。 此方法遵循最小特權原則,並被推薦採用。 你也可以把目錄閱讀器的角色當作更廣泛的替代方案。 欲了解更多資訊,請參閱 Microsoft Entra for Azure Synapse Analytics 的 Managed identities。

目錄讀取者角色

有關指引程序,請參見「將目錄讀取器角色指派給 Microsoft Entra 群組」。

以下的 PowerShell 腳本會將 Azure Synapse 資源身分新增至 Directory Readers 角色。

# This script grants "Directory Readers" permission to an Azure Synapse service principal.
# It can be executed only by a user who is a member of the **Privileged Roles Administrator** role.

Import-Module Microsoft.Graph.Authentication
$instanceName = "<InstanceName>"        # Enter the name of your managed instance or server
$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 logical server
$roleMember = Get-MgServicePrincipal -Filter "DisplayName eq '$instanceName'"
$roleMember.Count
if ($roleMember -eq $null) {
    Write-Output "Error: No service principal with name '$($instanceName)' found, make sure that instanceName parameter was entered correctly."
    exit
}
if (-not ($roleMember.Count -eq 1)) {
    Write-Output "Error: Multiple service principals with name '$($instanceName)'"
    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 '$($instanceName)' 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 "'$($instanceName)' service principal added to 'Directory Readers' role."
} else {
    Write-Output "Service principal '$($instanceName)' is already member of 'Directory Readers' role."
}

Microsoft Entra 管理員現在可以建立 Microsoft Entra 伺服器主體(登入)和資料庫主體(使用者)。

在 SQL 中創建 Microsoft Entra 主體

要在 Azure Synapse Analytics 中使用 Microsoft Entra 驗證連線到資料庫,你需要在資料庫中為該身分設定主體,且至少具有 CONNECT 權限。

資料庫使用者權限

當你建立資料庫使用者時,它會預設獲得資料庫的 CONNECT權限。 資料庫使用者也會在兩種情況下繼承許可權:

  • 使用者是 Microsoft Entra 群組的成員,該群組同時被分配了伺服器權限。
  • 你從登入建立該使用者,使用者會繼承該登入套用於此資料庫的伺服器指派權限。

不論主體類型為何,管理伺服器和資料庫主體的許可權都相同(Microsoft Entra ID、SQL 驗證等)。 授予資料庫角色權限,而非直接授予使用者權限。 然後用適當的權限將使用者加入角色。 此方法簡化了長期權限管理,並降低身分識別在不再適當時仍保留存取權限的可能性。

欲了解更多資訊,請參閱:

限制型資料庫使用者

封裝資料庫使用者是指未與 master 資料庫中的登入連結的 SQL 使用者類型。 若要建立 Microsoft Entra 內含資料庫使用者,必須使用至少擁有 ALTER ANY USER 權限的 Microsoft Entra 身分連線至該資料庫。 以下 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;

若要為受控識別或服務主管建立受限資料庫使用者,請輸入識別的顯示名稱:

CREATE USER [appName] FROM EXTERNAL PROVIDER;

要為 Microsoft Entra 使用者建立內含的資料庫使用者,請輸入該身份的使用者主要名稱:

CREATE USER [adrian@contoso.com] FROM EXTERNAL PROVIDER;

登入型使用者

注意

Microsoft Entra server principals (logins) 目前處於 Azure Synapse Analytics 的預覽階段。

支援 Microsoft Entra 伺服器主體 (或登入),這表示不需要自主資料庫使用者。 資料庫主體(使用者)可以根據伺服器主體建立,這表示 Microsoft Entra 使用者可以繼承伺服器層級指派的登入權限。

CREATE USER [appName] FROM LOGIN [appName];

關於建立Microsoft Entra伺服器主體(登入)的語法,請參見 CREATE LOGIN。

外部使用者

你無法直接為在與您的 Azure 訂閱綁定的 Microsoft Entra 租戶不同的租戶中管理的身份建立資料庫使用者。 不過,你可以將其他目錄的使用者匯入相關目錄,作為外部使用者。 接著你可以用它們來建立自主資料庫使用者,讓他們能存取資料庫。 外部使用者也可以透過加入 Microsoft Entra 群組取得存取權限。

Examples: 要建立代表Microsoft Entra聯邦或受管理網域使用者的包含式資料庫使用者:

CREATE USER [alice@fabrikam.com] FROM EXTERNAL PROVIDER;
  • 你以外部使用者身份匯入受管網域的聯邦網域使用者帳號,必須使用該受管理網域身份。

命名考量

你不能在 T-SQL 和 語句的使用者名稱中使用像冒號 或 & 符號 這類特殊字元。

Microsoft Entra ID 與 Azure Synapse Analytics 在使用者管理設計上有一個主要差異:Microsoft Entra ID 允許租戶內重複顯示名稱,而 Azure Synapse Analytics 則需要在專用 SQL 池中擁有獨特的伺服器主體名稱,以及資料庫中獨特的主體名稱。

Microsoft Graph 權限

此CREATE USER ... FROM EXTERNAL PROVIDER指令要求 Azure Synapse Analytics 代表登入使用者存取 Microsoft Entra ID(外部提供者)。 有時 Microsoft Entra ID 會回傳例外。

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

欲了解更多基於 Microsoft Entra 身分識別建立的封裝資料庫使用者相關資訊,請參見 CREATE USER。

設定多重要素驗證

為了提升安全性,建議設定 多重要素驗證(MFA),其會要求使用者使用第二種方式來驗證其身分以登入資料庫,例如電話通話或驗證器應用程式。

要在 Azure Synapse Analytics 使用多重驗證,先啟用多重驗證,然後使用條件存取政策強制執行多重認證。

與 Microsoft Entra 連結

在設定好 Microsoft Entra 驗證後,你可以使用 SQL Server Management Studio 或 SQL Server Data Tools 連線到 Azure Synapse Analytics,並設定 用戶端應用程式 使用 Microsoft Entra 身分來連線。

故障排除 "Microsoft Entra" 認證

如需指引,請參閱「故障排除與 Microsoft Entra 認證相關的問題」。