使用 Azure SQL 的 Azure Active Directory 服務主體

適用于:Azure SQL資料庫 Azure SQL 受控執行個體

Azure Active Directory (Azure AD) 支援代表 Azure AD applications (服務主體) 在 Azure SQL Database (SQL DB) 中建立使用者。 Azure SQL資料庫Azure SQL 受控執行個體支援此功能。

服務主體 (Azure AD 應用程式) 支援

本文適用於與 Azure AD 整合且為 Azure AD 註冊一部分的應用程式。 這些應用程式通常需要驗證和授權 Azure SQL 的存取權,才能執行各種工作。 這項功能可讓服務主體在 SQL Database 中建立 Azure AD 使用者。 有一項限制可防止代表已移除的 Azure AD 應用程式建立 Azure AD 物件。

使用 Azure 入口網站或 PowerShell 命令註冊 Azure AD 的應用程式時,Azure AD 租用戶中會建立兩個物件:

  • 應用程式物件
  • 服務主體物件

如需 Azure AD 應用程式的詳細資訊,請參閱 Azure Active Directory 中的應用程式和服務主體物件,並使用 Azure PowerShell 建立 Azure 服務主體

SQL Database 和 SQL 受控執行個體支援下列 Azure AD 物件:

  • Azure AD 使用者 (受控、同盟和來賓)
  • Azure AD 群組 (受控和同盟)
  • Azure AD 應用程式

SQL Database 現在支援代表 Azure AD 應用程式的 T-SQL 命令 CREATE USER [Azure_AD_Object] FROM EXTERNAL PROVIDER

使用服務主體建立 Azure AD 使用者的功能

支援此功能對於 Azure AD 應用程式自動化程序十分有用,而這些程序可在無人為互動的情況下,於 SQL Database 中建立和維護 Azure AD 物件。 服務主體可以是 SQL 邏輯伺服器的 Azure AD 管理員,以作為群組或個別使用者的一部分。 應用程式可以在使用系統管理員身分執行時,於 SQL Database 中自動建立 Azure AD 物件,而且不需要任何額外的 SQL 權限。 這可讓您完全自動建立資料庫使用者。 此功能也支援 Azure AD 系統所指派的受控身分識別和使用者所指派的受控身分識別,而在 SQL Database 中可代表服務主體將受控身分識別建立為使用者。 如需詳細資訊,請參閱什麼是 Azure 資源受控識別?

啟用服務主體以建立 Azure AD 使用者

若要在 SQL Database 中代表 Azure AD 應用程式啟用 Azure AD 物件建立,需要下列設定:

  1. 指派伺服器身分識別。 指派的伺服器身分識別代表受控服務身分識別 (MSI)。 伺服器身分識別可以是系統所指派或使用者所指派的受控身分識別。 如需詳細資訊,請參閱適用於 Azure SQL 的 Azure AD 中的使用者指派受控身分識別

    • 針對新的 Azure SQL 邏輯伺服器,請執行下列 PowerShell 命令:
    New-AzSqlServer -ResourceGroupName <resource group> -Location <Location name> -ServerName <Server name> -ServerVersion "12.0" -SqlAdministratorCredentials (Get-Credential) -AssignIdentity
    

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

    • 針對現有的 Azure SQL 邏輯伺服器,請執行下列命令:
    Set-AzSqlServer -ResourceGroupName <resource group> -ServerName <Server name> -AssignIdentity
    

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

    • 若要檢查是否已將伺服器身分識別指派給伺服器,請執行 Get-AzSqlServer 命令。

    注意

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

  2. 將 Azure AD 目錄讀取者權限授與建立或指派給伺服器的伺服器身分識別。

    • 若要授與此權限,請遵循下列文章中所提供以用於 SQL 受控執行個體的描述:佈建 Azure AD 管理員 (SQL 受控執行個體)
    • 授與此權限的 Azure AD 使用者必須是 Azure AD [全域管理員] 或 [特殊權限角色管理員] 角色的一部分。
    • 針對 Azure Synapse Analytics 工作區中的專用 SQL 集區,請使用工作區的受控識別,而非 Azure SQL 伺服器身分識別。

重要

有了適用於 Azure SQL 的 Microsoft Graph 支援,您可以使用較低層級的權限取代 [目錄讀取者] 角色。 如需詳細資訊,請參閱適用於 Azure SQL 的 Azure AD 中的使用者指派受控身分識別

您必須依上述順序執行步驟 1 和 2。 首先,建立或指派伺服器身分識別,接著授與目錄讀取者權限,或適用於 Azure SQL 的 Azure AD 中的使用者指派受控身分識別中討論的較低層級權限。 省略上述其中一個步驟或兩者,都會在 Azure SQL 中代表 Azure AD 應用程式建立 Azure AD 物件期間導致執行錯誤。

在 Azure AD 中,您可以將 [目錄讀取者] 角色指派給群組。 然後,群組擁有者可以將受控身分識別新增為此群組的成員,而這不需要 [全域管理員] 或 [特殊權限角色管理員] 即可授與 [目錄讀取者] 角色。 如需這項功能的詳細資訊,請參閱 Azure Active Directory 中適用於 Azure SQL 的 Directory 讀者角色

疑難排解和限制

  • 如果在 Azure SQL 中代表 Azure AD 應用程式建立 Azure AD 物件,而且未啟用伺服器身分識別以及授與 [目錄讀取者] 權限,或適用於 Azure SQL 的 Azure AD 中的使用者指派受控身分識別中討論的較低層級授權,則此作業將會失敗,並出現下列可能的錯誤。 下列範例錯誤為教學課程:使用 Azure AD 應用程式建立 Azure AD 使用者一文中,使用 PowerShell 命令執行建立 SQL Database 使用者 myapp
    • Exception calling "ExecuteNonQuery" with "0" argument(s): "'myapp' is not a valid login or you do not have permission. Cannot find the user 'myapp', because it does not exist, or you do not have permission."
    • Exception calling "ExecuteNonQuery" with "0" argument(s): "Principal 'myapp' 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)'"
    • 支援使用 Azure 入口網站、PowerShellREST APICLI 命令,將服務主體 (Azure AD 應用程式) 設定為 SQL Database 的 Azure AD 管理員。
  • 存取在不同租用戶中建立的 SQL Database 或 SQL 受控執行個體時,搭配使用 Azure AD 應用程式與另一個 Azure AD 租用戶中的服務主體將會失敗。 指派給此應用程式的服務主體,必須與 SQL 邏輯伺服器或受控執行個體的租用戶相同。
  • 使用 PowerShell 以針對 Azure SQL 將個別 Azure AD 應用程式設定為 Azure AD 管理員時,需要 Az.Sql 2.9.0 \(英文\) 模組或更新版本。 確定您已升級到最新模組。

後續步驟