使用 Azure SQL 的 Microsoft Entra 服務主體

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

Azure SQL 資源支援在 Microsoft Entra ID 中使用服務主體和受控識別的應用程式以程序設計方式存取 (先前稱為 Azure Active Directory)。

服務主體 (Microsoft Entra 應用程式) 支援

本文適用於在 Microsoft Entra ID 中註冊的應用程式。 使用應用程式認證來存取 Azure SQL 支援職責分離的安全性原則,讓組織能夠針對每個連線到其資料庫的應用程式設定精確的存取。 受管理身分識別是特殊形式的服務主體,特別建議使用,因為它們是無密碼的,而且不需要開發人員管理的認證。

Microsoft Entra ID 進一步啟用進階驗證案例,例如 OAuth 2.0 代理者流程(OBO)。 OBO 可讓應用程式要求登入的使用者認證,適用於在沒有委派許可權的情況下,應用程式本身不應該獲得數據庫存取權的情況。

如需 Microsoft Entra 應用程式的詳細資訊,請參閱 Microsoft Entra 識別碼 中的應用程式和服務主體物件和 使用 Azure PowerShell 建立 Azure 服務主體。

使用服務主體建立 Microsoft Entra 使用者

在 Microsoft Entra 應用程式自動化程式中,支援這項功能很有用,其中 Microsoft Entra 主體會在 SQL 資料庫 或 SQL 受管理執行個體 中建立和維護,而不需要人為互動。 服務主體可以是 SQL 邏輯伺服器或受控實例的 Microsoft Entra 系統管理員,做為群組或獨立身分識別的一部分。 應用程式可以在 SQL 資料庫 或 SQL 受管理執行個體 中自動建立 Microsoft Entra 物件,以完全自動化資料庫使用者建立。

啟用服務主體以建立 Microsoft Entra 使用者

使用應用程式存取 Azure SQL 時,建立 Microsoft Entra 使用者和登入時,預設需要未指派給服務主體或受控識別的許可權:能夠從 Microsoft Graph 讀取租使用者中的使用者、群組和應用程式。 SQL 引擎必須具備這些許可權,才能驗證 或 CREATE USER中指定的CREATE LOGIN身分識別,並提取重要資訊,包括用來建立登入或使用者的身分識別物件或應用程式識別碼。

當 Microsoft Entra 使用者執行這些命令時,Azure SQL 的 Microsoft 應用程式 會使用委派的許可權來模擬登入的使用者,並使用其許可權查詢 Microsoft Graph。 服務主體無法使用此流程,因為應用程式無法模擬另一個應用程式。 相反地,SQL 引擎會嘗試使用其伺服器身分識別,這是指派給 SQL 受控實例、Azure SQL 邏輯伺服器或 Azure Synapse 工作區的主要受控識別。 伺服器身分識別必須存在,且 Microsoft Graph 查詢許可權或作業失敗。

下列步驟說明如何將受控識別指派給伺服器,並將它指派給 Microsoft Graph 許可權,讓服務主體能夠在資料庫中建立 Microsoft Entra 使用者和登入。

  1. 指派伺服器身分識別。 伺服器識別可以是系統指派或使用者指派的受控識別。 如需詳細資訊,請參閱 適用於 Azure SQL 的 Microsoft Entra ID 中的使用者指派受控識別。

    • 下列 PowerShell 命令會建立以系統指派的受控識別布建的新邏輯伺服器:
    New-AzSqlServer -ResourceGroupName <resource group> -Location <Location name> -ServerName <Server name> -ServerVersion "12.0" -SqlAdministratorCredentials (Get-Credential) -AssignIdentity
    

    如需詳細資訊,請參閱 New-AzSqlServer 命令或適用於 SQL 受管理執行個體 的 New-AzSqlInstance 命令。

    • 針對現有的邏輯伺服器,執行下列命令,將系統指派的受控識別新增至該伺服器:
    Set-AzSqlServer -ResourceGroupName <resource group> -ServerName <Server name> -AssignIdentity
    

    如需詳細資訊,請參閱 Set-AzSqlServer 命令或適用於 SQL 受管理執行個體 的 Set-AzSqlInstance 命令。

    注意

    您也可以使用 REST API 和 CLI 命令來指派伺服器身分識別。 如需詳細資訊,請參閱 az sql server createaz sql server updateServers - REST API

  2. 授與伺服器身分識別許可權以查詢 Microsoft Graph。 這可以透過多種方式完成:將身分識別新增至 Microsoft Entra Directory Readers 角色、將身分識別指派給個別的 Microsoft Graph 許可權,或將身分識別新增至具有 目錄讀取者 角色的角色可指派群組:

    • 將伺服器身分識別新增至可指派角色的群組

      在生產環境中,建議租用戶系統管理員建立可指派角色的群組,並將目錄讀取者角色指派給它。 群組擁有者接著可以將伺服器身分識別新增至群組,並繼承這些許可權。 這可移除全域 管理員 istrator 或 Privileged Roles 管理員 istrator 將許可權授與每個個別伺服器身分識別的需求,讓系統管理員能夠針對此案例將許可權指派委派給群組的擁有者。 如需詳細資訊,請參閱 Azure SQL 的 Microsoft Entra ID 中的目錄讀取者角色。

    • 將 Microsoft Graph 許可權指派給伺服器身分識別

      若要將個別的 Microsoft Graph 許可權指派給伺服器身分識別,您必須擁有 Microsoft Entra Global 管理員 istratorPrivileged Roles 管理員 istrator 角色。 建議不要指派 目錄讀取者 角色,因為伺服器身分識別不需要的角色中包含許可權。 僅指派個別的 Microsoft Graph 讀取許可權會限制您租使用者中的伺服器身分識別許可權,並維護最低許可權原則。 如需指示,請參閱 適用於 Azure SQL 的 Microsoft Entra ID 中的使用者指派受控識別。

    • 將伺服器身分識別新增至目錄讀取者角色

      若要將伺服器身分識別新增至目錄讀取者角色,您必須是 Microsoft Entra Global 管理員 istratorPrivileged Roles 管理員 istrator 角色的成員。 基於兩個原因,不建議在生產環境中使用此選項:目錄讀取者角色授與伺服器身分識別所需的許可權更多,而且角色指派程式仍需要每個伺服器身分識別的系統管理員核准(不同於使用群組)。 請遵循布建 Microsoft Entra admin (SQL 受管理執行個體) 一文中提供的 SQL 受管理執行個體 指示。

疑難排解

進行疑難解答時,您可能會遇到下列錯誤:

Msg 33134, Level 16, State 1, Line 1
Principal 'test-user' could not be resolved.
Error message: 'Server identity is not configured. Please follow the steps in "Assign an Azure AD identity to your server and add Directory Reader permission to your identity" (https://aka.ms/sqlaadsetup)'

此錯誤表示伺服器身分識別尚未建立或尚未指派 Microsoft Graph 許可權。 請遵循將身分識別指派給邏輯伺服器的步驟,並將目錄讀取者許可權指派給邏輯伺服器身分識別。

限制

  • 服務主體無法跨租用戶的界限進行驗證。 嘗試使用在不同租使用者中建立的 Microsoft Entra 應用程式存取 SQL 資料庫 或 SQL 受管理執行個體 失敗。

  • 需要 Az.Sql 2.9.0 模組或更新版本,才能將 Microsoft Entra 應用程式設定為 Azure SQL 的 Microsoft Entra 系統管理員。 請確定您已升級至最新的模組。

下一步