本文深入介紹如何在 Azure Synapse Analytics 中使用 Microsoft Entra 認證搭配 Synapse SQL。
Note
Microsoft Entra server principals 目前正處於 Azure Synapse Analytics 的預覽階段。
要設定 Microsoft Entra 認證,請參見「使用 Azure Synapse Analytics 配置與管理 Microsoft Entra 認證」。
Overview
Microsoft Entra ID 可讓您集中管理資料資產中人類和服務身分識別。 透過將 Microsoft Entra 與 Azure Synapse Analytics 整合進行認證,您可以簡化身分與權限管理,同時啟用詳細的條件式存取與對您資料連線的治理。
使用 Microsoft Entra 驗證包括下列優點:
- 取代較不安全的驗證方法,例如使用者名稱和密碼。
- 消除或協助停止跨伺服器使用過多的使用者識別。
- Microsoft Entra 群組可讓資料庫權限管理從個別帳戶中抽走並進入作業群組中。
- 允許在單一位置變換密碼。
- 僅透過 Microsoft Entra 驗證提供完整的 SQL 驗證替代方案。
- Azure 資源受控識別無需儲存連線至資料庫的服務密碼,以及從資料庫至其他 Azure 資源的連線。
- 啟用新式安全性控制,包括具有一系列簡易驗證選項的多重要素驗證,例如撥打電話、文字簡訊、含有 PIN 的智慧型卡片或行動應用程式通知。
- Microsoft Entra ID 可讓您與許多新式驗證通訊協定整合,包括 OpenID Connect、OAuth2.0、Kerberos 限制委派等等。
- 啟用對資料來源連線的集中式監視。
- 啟用條件式存取控制,例如要求符合規範的裝置或驗證方法才能成功連線。
Note
Microsoft Entra 驗證僅支援來自 Microsoft Entra ID 的存取權杖,且不支援協力廠商存取權杖。 Microsoft Entra ID 也不支援將 Microsoft Entra ID 查詢重新導向至第三方端點。 此限制適用於所有 SQL 平台及所有支援 Microsoft Entra 認證的作業系統。
設定步驟
設定 Microsoft Entra 驗證的一般步驟如下:
- 建立並初始化 Microsoft Entra 租用戶。
- 建立一個 Azure Synapse workspace 或獨立專用 SQL 池。
- 指派一位 Microsoft Entra 管理員給工作空間或邏輯伺服器。
- 在您的資料庫中建立與 Microsoft Entra 身分識別對應的 SQL 主體。
- 透過使用 Azure Identity 函式庫和認證方法來配置您的客戶端應用程式以連接。
- 透過 Microsoft Entra 身分識別連線至您的資料庫。
支援的身分識別與驗證方法
Azure Synapse Analytics 支援在 Synapse SQL 中使用以下 Microsoft Entra 身份作為登入帳號和使用者(主體):
- Microsoft Entra 使用者:Microsoft Entra 租用戶中的任何使用者類型,包括內部使用者、外部使用者、來賓和成員。 也支援與 Microsoft Entra ID 同盟的 Active Directory 網域成員,並可設定為無縫單一登入。
- 應用程式:存在於 Azure 中的應用程式可使用服務主體名稱或受控識別,直接向 Azure Synapse Analytics 驗證身分。 使用受管理身份是較佳的選擇,因為認證無需密碼,且免除了開發者管理的憑證需求。
- Microsoft Entra 群組,可根據群組成員資格來管理使用者和應用程式存取,以簡化整個組織的存取管理。
對於使用者識別,支援下列驗證方法:
- Microsoft Entra 整合式 (Windows 驗證) 受 Microsoft Entra 混合式身分識別和 Active Directory 同盟服務支援。
- Microsoft Entra MFA 或多重要素驗證,需要超出使用者知識範圍的額外安全性檢查。
- Microsoft Entra 密碼驗證,會使用在 Microsoft Entra ID 中儲存和管理的使用者認證。
- Microsoft Entra 預設驗證,會掃描應用程式機器上的各種認證快取,而且可以使用使用者權杖向 SQL 進行驗證。
對於服務或工作負載身分識別,支援下列驗證方法:
- Azure 資源的受控身份,包括使用者指派的和系統指派的。 受控識別驗證以權杖為基礎,其中身分識別會指派至想要使用它進行驗證的資源。 Azure 身分識別平台會驗證該關聯性,以啟用無密碼驗證。
- Microsoft Entra 服務主體名稱和應用程式 (用戶端) 密碼。 不建議使用此驗證方法,因為可能存在與猜測和外洩密碼相關的風險。
- Microsoft Entra 預設驗證,會掃描應用程式機器上的各種認證快取,並且可以使用應用程式令牌來對 SQL 進行驗證。
Microsoft Entra 系統管理員
要啟用 Microsoft Entra 認證,必須為你的 Azure Synapse 工作空間或邏輯伺服器設定 Microsoft Entra 管理員。 此管理員與 SQL 管理員並存。 Microsoft Entra 管理員可以是 Azure 租用戶中的使用者、群組、服務主體或受控識別。 一次只能設定一個身份。 移除 Microsoft Entra 管理員會使 Microsoft Entra 基於認證的連線失效,即使是現有擁有資料庫權限的 Microsoft Entra 使用者也無法使用。
Tip
Microsoft Entra 群組可讓多個身分作為伺服器上的 Microsoft Entra 管理員。 當系統管理員設定為群組時,所有群組成員都會繼承 Microsoft Entra 管理員角色。 Microsoft Entra 群組管理員藉由將管理員管理從伺服器資料平面操作轉移到 Microsoft Entra ID 和群組擁有者的手中,來增強可管理性。 群組可用於連線到 SQL 的所有 Microsoft Entra 身分識別,允許在伺服器和資料庫中進行一次性的使用者和權限設定,將所有使用者管理都留給群組。
Microsoft Entra 管理員扮演特殊角色:它是第一個能建立其他 Microsoft Entra 登入與使用者的帳號,統稱為主體。 管理員是伺服器 master 資料庫中的自主資料庫使用者。 管理員帳戶是在每個使用者資料庫中擔任 db_owner 角色的成員,並以 dbo 使用者的身分進入每個使用者資料庫。 如需有關管理員帳戶的詳細資訊,請參閱管理資料庫和登入 (部分機器翻譯)。
Microsoft Entra 主體
Note
Microsoft Entra server principals (logins) 目前處於 Azure Synapse Analytics 的預覽階段。
你可以透過三種方式在 Azure Synapse Analytics 中建立 Microsoft Entra 身份作為主體身分:
- 作為伺服器主體或 登入
- 作為登入型使用者 (資料庫主體的類型)
- 封閉式資料庫使用者
Important
適用於 Azure SQL 的 Microsoft Entra 驗證不會與 Azure RBAC 整合。 要使用 Microsoft Entra 身分連線至 Azure SQL 並執行查詢,你需要在這些身分需要存取的資料庫中,將這些身分建立為 Microsoft Entra 主體。
SQL Server Contributor與SQL DB Contributor角色可保護管理相關的部署操作,而非資料庫連線存取。
專用 SQL 池中的登入(伺服器主體)
Microsoft Entra 身份的 Server principals(logins)目前在 Azure Synapse Analytics 專用 SQL 集區中為預覽版。
下列 T-SQL 顯示如何建立 Microsoft Entra 登入:
CREATE LOGIN [MSEntraUser] FROM EXTERNAL PROVIDER
Microsoft Entra 登入在 sys.server_principals 中具有下列屬性值:
| Property | Value |
|---|---|
SID (安全識別碼) |
Microsoft Entra 身分識別的物件識別碼的二進位表示法 |
| 型別 | E = 來自 Microsoft Entra ID 的外部登入或應用程式 X = 來自 Microsoft Entra ID 的外部群組 |
| 類型描述 | 用於 Microsoft Entra 登入或應用程式的 EXTERNAL_LOGIN Microsoft Entra 群組的 EXTERNAL_GROUP |
登入型使用者
登入型使用者會繼承指派至其 Microsoft Entra 登入的伺服器層級角色和權限。
下列 T-SQL 顯示如何為 Microsoft Entra 身分識別建立登入型使用者:
CREATE USER [MSEntraUser] FROM LOGIN [MSEntraUser]
下表詳細說明 sys.database_principals中 的 Microsoft Entra 登入型使用者屬性值:
| Property | Value |
|---|---|
SID (安全識別碼) |
Microsoft Entra 身分識別的物件識別碼以二進位格式表示,加上 'AADE' |
| 型別 | E = 來自 Microsoft Entra ID 的外部登入或應用程式 X = 來自 Microsoft Entra ID 的外部群組 |
| 類型描述 | 用於 Microsoft Entra 登入或應用程式的 EXTERNAL_LOGIN Microsoft Entra 群組的 EXTERNAL_GROUP |
限制型資料庫使用者
資料庫內的使用者可以隨著資料庫移動。 它們與伺服器或執行個體中定義的身分識別沒有關聯,你可以輕鬆地將它們和資料庫從一台伺服器或執行個體移動到另一台,而不會中斷。
下列 T-SQL 顯示如何為 Microsoft Entra 身分識別建立自主資料庫使用者:
CREATE USER [MSEntraUser] FROM EXTERNAL PROVIDER
Microsoft Entra 資料庫型使用者與 sys.database_principals 中登入型使用者具有相同的屬性值,但建 SID 構方式不同:
| Property | Value |
|---|---|
SID (安全識別碼) |
Microsoft Entra 身分識別的物件識別碼的二進位表示法 |
| 型別 | E = 來自 Microsoft Entra ID 的外部登入或應用程式 X = 來自 Microsoft Entra ID 的外部群組 |
| 類型描述 | 用於 Microsoft Entra 登入或應用程式的 EXTERNAL_LOGIN Microsoft Entra 群組的 EXTERNAL_GROUP |
若要取得所 SID 依據的原始 Microsoft Entra GUID,請使用下列 T-SQL 轉換:
SELECT CAST(sid AS UNIQUEIDENTIFIER) AS EntraID FROM sys.database_principals
Caution
你可能會無意中建立一個 contained Microsoft Entra 資料庫使用者,其名稱與伺服器或執行個體層級的 Microsoft Entra 登入相同。 由於這些主體彼此沒有連結,資料庫使用者不會繼承伺服器登入的權限。 在連線請求中,身份可能會被混淆,導致行為未定義。
使用下列 T-SQL 查詢來判定資料庫使用者是否為登入型使用者或自主資料庫使用者:
SELECT CASE
WHEN CONVERT(VARCHAR(100), sid, 2) LIKE '%AADE' AND len(sid) = 18 THEN 'login-based user'
ELSE 'contained database user'
END AS user_type,
*
FROM sys.database_principals WHERE TYPE = 'E' OR TYPE = 'X'
使用下列 T-SQL 查詢來檢視資料庫中的所有 Microsoft Entra 主體:
SELECT
name,
CAST(sid AS UNIQUEIDENTIFIER) AS EntraID,
CASE WHEN TYPE = 'E' THEN 'App/User' ELSE 'Group' AS user_type,
sid
FROM sys.database_principals WHERE TYPE = 'E' OR TYPE = 'X'
Microsoft Entra 專屬驗證
當你啟用僅限 Microsoft Entra 的認證時,就是關閉 SQL 認證。 你不能用 SQL 認證來連接工作區、SQL 池或資料庫。
若要開始使用,請參閱 設定 Microsoft Entra-only 驗證。
多重要素驗證 (MFA)
Microsoft Entra 多重要素驗證是 Microsoft 雲端式身分識別和存取管理服務提供的一項安全功能。 多重要素驗證要求使用者提供密碼以外的額外驗證步驟,從而增強使用者登入的安全性。
Microsoft Entra 多重要素驗證有助於守護對資料與應用程式的存取,同時滿足使用者對簡單登入流程的需求。 MFA 藉由要求使用者提供兩個或更多的驗證要素,為使用者登入額外新增一層安全性。 這些要素通常包括使用者知道的資訊 (密碼)、使用者擁有的東西 (智慧型手機或硬體 Token),以及/或使用者的特徵 (生物特徵辨識資料)。 藉由結合多重要素,MFA 可大幅降低未經授權存取的可能性。
多重要素驗證是 Azure Synapse Analytics 支援的驗證方法。
要開始,請參閱 「設定 Microsoft Entra 多重要素驗證」。
Microsoft Entra B2B 支援
所有 SQL 產品的 Microsoft Entra 驗證也支援 Microsoft Entra B2B 共同作業,可讓企業邀請來賓使用者與其組織共同作業。 來賓使用者可以以個別使用者或 Microsoft Entra 群組成員的身分連線至資料庫。
Microsoft Entra 同盟到 Active Directory 的信任架構
Microsoft Entra ID 也會與熟悉的身分識別和存取權管理解決方案整合,例如 Active Directory。 透過混合式加入你的內部部署 Active Directory,可讓透過 Microsoft Entra ID 聯合的 Windows 身分使用單一登入憑證連線至 Azure Synapse Analytics。
針對同盟,Microsoft Entra ID 提供兩種安全驗證方法:直通式驗證和密碼雜湊驗證。 如果您考慮將內部部署的 Active Directory 與 Microsoft Entra ID 建立同盟,請檢閱為您的 Microsoft Entra 混合式身分識別解決方案選擇正確的驗證方法。
如需設定和同步處理 Microsoft Entra 混合式身分識別的詳細資訊,請參閱下列文章:
- 使用 Microsoft Entra Connect Sync 實作密碼雜湊同步
- Microsoft Entra 透過式驗證
- 在 Azure 中部署 Active Directory 同盟服務與 Microsoft Entra Connect 和同盟
Microsoft Entra ID 會驗證權杖,而資料庫會信任權杖,並驗證簽發者和其他詳細資料。 客戶 1 可以代表 Microsoft Entra ID 與原生使用者或 Microsoft Entra ID 與同盟使用者。 客戶 2 代表一個可能的解決方案,其中包含匯入的使用者;在此範例中,這些使用者來自聯邦 Microsoft Entra ID,並且 ADFS 正與 Microsoft Entra ID 同步處理。 重要的是要了解,使用 Microsoft Entra 認證存取資料庫時,主機訂閱必須與 Microsoft Entra ID 綁定。 你必須使用同一個訂閱來建立 Azure SQL 或 Azure Synapse 資源。
Permissions
Microsoft Entra 管理員所獲得的權限與 Azure Synapse Analytics 中其他主體的權限不同。 在某些情況下,Azure Synapse Analytics 也需要 Microsoft Graph 權限才能使用 Microsoft Entra 認證。
管理員權限
建立 Microsoft Entra 管理員時,會分配以下權限與角色:
- 各資料庫的 db_owner
Azure Synapse Analytics 權限
主體需要資料庫中的 ALTER ANY USER 權限,才能建立使用者。
預設情況下,伺服器管理員帳號、擁有 CONTROL ON DATABASE 的資料庫使用者,以及屬於 db_owner 資料庫角色的成員都具有 ALTER ANY USER 權限。
要在 Azure SQL 建立 Microsoft Entra 主體,請求者必須向 Microsoft Graph 查詢主體的詳細資訊。 在初始部署時,唯一能查詢 Microsoft Graph 的身份是 Microsoft Entra 管理員。因此,管理員必須是第一個建立其他 Microsoft Entra 主體的身份。 之後,管理員可以將ALTER ANY USER指派給其他主體,這樣他們就能建立其他 Microsoft Entra 主體。
使用 Microsoft Entra 驗證進行零接觸部署
由於 Microsoft Entra 管理員必須是第一個連接到資料庫並建立其他 Microsoft Entra 使用者的身分,因此將部署基礎結構的身分新增為管理員會很有幫助。 接著,您的部署可以執行初始設定,例如建立其他 Microsoft Entra 主體,並指派其權限。 部署時,可以使用像 PowerShell ARM 範本這類工具來撰寫自動化服務主體建立的腳本。 Azure SQL 目前不支援原生 API 來設定使用者建立和權限管理。 你只能透過直接連線到 SQL 實例來執行這些操作。
Microsoft Graph 權限
若要建立 Microsoft Entra 主體和其他幾個案例,Azure SQL 需要進行 Microsoft Graph 呼叫,才能擷取 Microsoft Entra ID 中身份識別的相關資訊,並驗證是否存在身分識別。 為此,SQL 程序必須在客戶租戶內擁有或取得 Microsoft Graph 的讀取權限。 你可以透過多種方式取得此存取權限:
- 如果執行指令的 SQL 安全性主體是使用者身分,你不需要在 SQL 實例上授予額外權限來查詢 Microsoft Graph。
- 如果執行指令的 SQL 主體是服務身份,例如服務主體或受管理身份,Azure SQL 實例需要自己的權限才能查詢 Microsoft Graph。
- 將應用程式權限指派給邏輯伺服器或受控執行個體主要伺服器識別的應用程式權限(受控識別)。 SQL 程序可利用主要伺服器身分,向租用戶中的其他 Azure 服務進行驗證,例如 Microsoft Graph。 下表說明各種情境以及成功執行該指令所需的 Microsoft Graph 權限。
| 情境 | 最低權限 |
|---|---|
適用於 Microsoft Entra 服務主體身分或受控識別的 CREATE USER 或 CREATE LOGIN |
Application.Read.All |
CREATE USER 或 CREATE LOGIN,適用於 Microsoft Entra 使用者 |
User.Read.All |
CREATE USER或CREATE LOGIN,適用於 Microsoft Entra 群組 |
群組成員。全部閱讀 |
Tip
目錄閱讀器角色是你可以指派給身分的最小範圍角色,涵蓋所有必要的權限。 透過使用角色,你可以將它們指派給 Microsoft Entra 安全性群組,這可將管理從個別實體轉移到概念性群組。
工具支援
SQL Server Management Studio (SSMS) 支援許多 Microsoft Entra 驗證連線選項,包括多重要素驗證。
適用於 Visual Studio 的 SQL Server Data Tools (SSDT) 從 2015 版開始,支援使用 Microsoft Entra ID 進行密碼、整合式和互動式驗證。 如需詳細資訊,請參閱 SQL Server Data Tools (SSDT) 中的 Microsoft Entra ID 支援。
- 目前,SSDT 物件總管 並未顯示 Microsoft Entra 使用者。 解決方法是在 sys.database_principals 中檢視使用者。
最低版本
若要在 Azure Synapse Analytics 中使用 Microsoft Entra 驗證,使用這些工具時您需要具備下列最低版本:
- SQL Server Management Studio (SSMS) 18.6 或更新版本
- 適用於 Visual Studio 2015 的 SQL Server Data Tools、版本 14.0.60311.1 (2016 年 4 月) 或更新版本
- .NET Framework Data Provider for SqlServer,最低版本 .NET Framework 4.6
- 從 15.0.1 版起,sqlcmd 公用程式和 bcp 公用程式都支援使用多重要素驗證的 Active Directory 互動式驗證。
- Microsoft JDBC Driver 6.0 for SQL Server 支援 Microsoft Entra 驗證。 此外,請參閱 設定連接屬性。
連線至 Microsoft Entra 與 Azure Synapse Analytics
在你為 Azure SQL 資源設定 Microsoft Entra 認證後,你可以使用 SQL Server Management Studio、SQL Server Data Tools 以及客戶端應用程式來連接。
Limitations
在使用 Azure Synapse Analytics 進行 Microsoft Entra 認證時,請考慮以下限制:
如果 Microsoft Entra 使用者和服務主體 (Microsoft Entra 應用程式) 屬於超過 2048 個 Microsoft Entra 安全性群組的成員,則會不受支援且無法登入資料庫。
下列系統函式不受支援,並在 Microsoft Entra 主體執行時傳回
NULL值:SUSER_ID()SUSER_NAME(<ID>)SUSER_SNAME(<SID>)SUSER_ID(<name>)SUSER_SID(<name>)
建議將連接逾時設定為 30 秒。
屬於身為
db_owner資料庫角色成員之群組的 Microsoft Entra 使用者,嘗試在 Azure Synapse Analytics 中使用 CREATE DATABASE SCOPED CREDENTIAL 時,可能會看到以下錯誤:SQL Error [2760] [S0001]: The specified schema name 'user@mydomain.com' either doesn't exist or you do not have permission to use it.若要減輕此
CREATE DATABASE SCOPED CREDENTIAL問題,請直接將 Microsoft Entra 使用者的身分識別新增至db_owner角色。Azure Synapse Analytics 不會為透過 Microsoft Entra 群組成員登入的使用者建立隱含使用者。 因此,即使 Microsoft Entra 群組是擁有該權限的角色成員,需要分配所有權的操作仍可能失敗。
例如,透過具有 db_ddladmin 角色的 Microsoft Entra 群組登入資料庫的使用者,無法在沒有明確定義結構描述的情況下執行
CREATE SCHEMA、ALTER SCHEMA和其他物件建立陳述式 (例如資料表、檢視或類型)。 若要解決此問題,必須為該使用者建立 Microsoft Entra 使用者,或必須變更 Microsoft Entra 群組,以指派類似DEFAULT_SCHEMAdbo 等角色。移除 Microsoft Entra 管理員會使 Microsoft Entra 驗證連線無法使用。