使用 Azure SQL 的 Microsoft Entra 服務主體
適用於: Azure SQL 資料庫 Azure 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 ID 中的應用程式和服務主體物件以及使用 Azure PowerShell 建立 Azure 服務主體。
使用服務主體建立 Microsoft Entra 使用者
在 Microsoft Entra 應用程式自動化處理程序中,支援這項功能很有用,其中 Microsoft Entra 主體會在 SQL Database 或 SQL 受控執行個體中建立和維護,無需人工介入。 服務主體可以是 SQL 邏輯伺服器或受控執行個體的 Microsoft Entra 管理員,作為群組的一部分或作為獨立身分識別。 應用程式可以在 SQL Database 或 SQL 受控執行個體中自動建立 Microsoft Entra 物件,以完全自動化資料庫使用者建立。
啟用服務主體以建立 Microsoft Entra 使用者
使用應用程式存取 Azure SQL 時,建立 Microsoft Entra 使用者和登入需要預設未指派給服務主體或受控識別的權限:能夠從 Microsoft Graph 讀取租用戶中的使用者、群組和應用程式。 SQL 引擎需要這些權限,才能驗證 CREATE LOGIN
或 CREATE USER
中指定的身分識別,並提取重要資訊,包括用來建立登入或使用者的身分識別物件或應用程式識別碼。
當 Microsoft Entra 使用者執行這些命令時,Azure SQL 的 Microsoft 應用程式會使用委派權限來模擬登入的使用者,並使用其權限查詢 Microsoft Graph。 服務主體無法使用此流程,因為應用程式無法模擬另一個應用程式。 相反,SQL 引擎會嘗試使用其伺服器身分識別,這是指派給 SQL 受控執行個體、Azure SQL 邏輯伺服器或 Azure Synapse 工作區的主要受控識別。 伺服器身分識別必須存在且具有 Microsoft Graph 查詢權限,否則作業將失敗。
下列步驟說明如何將受控識別指派給伺服器,並將它指派給 Microsoft Graph 權限,讓服務主體能夠在資料庫中建立 Microsoft Entra 使用者和登入。
指派伺服器身分識別。 伺服器身分識別可以是使用者指派的受控識別,也可以是系統指派的受控識別。 如需詳細資訊,請參閱適用於 Azure SQL 的 Microsoft Entra中的受控身分識別。
- 下列 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 命令。
- 若要檢查是否已將伺服器身分識別指派給伺服器,請執行 Get-AzSqlServer 命令,或針對 SQL 受控執行個體執行 Get-AzSqlInstance 命令。
注意
您也可以使用 REST API 和 CLI 命令來指派伺服器身分識別。 如需詳細資訊,請參閱 az sql server create、az sql server update 和伺服器 - REST API。
授與伺服器身分識別權限,以查詢 Microsoft Graph。 這可以透過多種方式來完成:將身分識別新增至 Microsoft Entra 目錄讀取者角色,為身分識別指派個別 Microsoft Graph 權限,或將身分識別新增至具有目錄讀取者角色的可指派角色的群組:
將伺服器身分識別新增至可指派角色的群組
在生產環境中,建議租用戶系統管理員建立可指派角色的群組,並將目錄讀取者角色指派給它。 然後,群組擁有者可以將伺服器身分識別新增至群組,並繼承這些權限。 這可移除全域系統管理員或特殊權限角色管理員將權限授與每個個別伺服器身分識別的需求,讓系統管理員將此案例的權限指派委派給群組的擁有者。 如需詳細資訊,請參閱適用於 Azure SQL 的 Microsoft Entra ID 中的目錄讀取者角色。
將 Microsoft Graph 權限指派給伺服器身分識別
若要將個別 Microsoft Graph 權限指派給伺服器身分識別,您必須具有 Microsoft Entra 全域系統管理員或特殊權限角色管理員角色。 建議不要指派目錄讀取者角色,因為該角色中包含伺服器身分識別不需要的權限。 僅指派個別 Microsoft Graph 讀取權限會限制伺服器身分識別在租用戶內的權限,並維護最低權限原則。 如需指示,請參閱 適用於 Azure SQL 的 Microsoft Entra 受控識別。
將伺服器身分識別新增至目錄讀取者角色
若要將伺服器身分識別新增至目錄讀取者角色,您必須是 Microsoft Entra 全域系統管理員或特殊權限角色管理員角色的成員。 基於以下兩個原因,在生產環境中不建議使用此選項:目錄讀取者角色提供的權限多於伺服器身分識別所需的權限,並且角色指派程序仍然需要每個伺服器身分識別的管理員核准 (與使用群組不同)。 請遵循設置 Microsoft Entra 管理員 (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 Database 或 SQL 受控執行個體失敗。
針對 Azure SQL 將 Microsoft Entra 應用程式設定為 Microsoft Entra 管理員時,需要 Az.Sql 2.9.0 或更高版本的模組。 確定您已升級到最新模組。