教學課程:設定適用於 SQL Server 的 Microsoft Entra 驗證

適用於:SQL Server 2022 (16.x)

本文說明使用 Microsoft Entra ID 設定驗證的逐步流程,並示範如何使用不同的 Microsoft Entra 驗證方法。

注意

Microsoft Entra 標識符 先前稱為 Azure Active Directory (Azure AD)。

在本教學課程中,您會了解如何:

  • 建立和注冊 Microsoft Entra 應用程式
  • 將權限授與 Microsoft Entra 應用程式
  • 建立和指派憑證
  • 透過 Azure 入口網站設定 SQL Server 的 Microsoft Entra 驗證
  • 建立登入和使用者
  • 使用支援的驗證方法連線

必要條件

驗證必要條件

注意

擴充功能已在 Azure 中完成實作,以允許在設定 SQL Server 的 Microsoft Entra 系統管理員期間,自動建立 Azure Key Vault 憑證和 Microsoft Entra 應用程式。 如需詳細資訊,請參閱使用自動化來設定適用於 SQL Server 的 Microsoft Entra 系統管理員

  • SQL Server 的 Microsoft Entra 應用程式註冊。 將 SQL Server 執行個體註冊為 Microsoft Entra 應用程式,可讓執行個體查詢 Microsoft Entra ID,並允許 Microsoft Entra 應用程式代表 SQL Server 執行個體進行驗證。 應用程式註冊還需要一些權限,SQL Server 會使用這些權限來執行特定查詢。

  • SQL Server 會使用此驗證的憑證,且該憑證會儲存在 Azure Key Vault (AKV) 中。 Azure Arc 代理程式會將憑證下載至 SQL Server 執行個體主機。

警告

請一律對透過 Microsoft Entra ID 驗證的連線進行加密。 如果 SQL Server 使用自我簽署憑證,您必須在連接字串中新增 trust server cert = true。 雖然 SQL Server 和 Windows 驗證的連線不需要加密,但強烈建議您進行加密。

建立和注冊 Microsoft Entra 應用程式

  1. 移至 Azure 入口網站,選取 [Microsoft Entra ID]>[應用程式註冊]>[新增註冊]
    1. 指定名稱 - 本文中的範例使用的名稱為 SQLServerCTP1
    2. 選取 [支援的帳戶類型],並使用 [僅限此組織目錄中的帳戶]
    3. 請勿設定重新導向 URI
    4. 選取 [註冊]

請參閱下列應用程式註冊:

Screenshot of registering application in the Azure portal.

授與應用程式權限

選取新建立的應用程式,然後在左側功能表上選取 [API 權限]。

  1. 依序選取 [新增權限] > [Microsoft Graph] > [應用程式權限]

    1. 勾選 [Directory.Read.All]
    2. 選取 [新增權限]
  2. 選取 [新增權限]> [Microsoft Graph] > [委派權限]

    1. 勾選 [Application.Read.All]
    2. 勾選 [Directory.AccessAsUser.All]
    3. 勾選 [Group.Read.All]
    4. 勾選 [User.Read.All]
    5. 選取 [新增權限]
  3. 選取 [授與管理員同意]。

Screenshot of application permissions in the Azure portal.

注意

若要將管理員同意授與給上述權限,您的 Microsoft Entra 帳戶需具有「全域系統管理員」或「特殊權限角色管理員」角色。

建立和指派憑證

  1. 前往 Azure 入口網站,選取 [金鑰保存庫],然後選取您要使用的金鑰保存庫,或建立一個新的金鑰保存庫。 依序選取 [憑證] > [產生/匯入]

    1. 針對 [憑證建立的方法],請使用 [產生]。

    2. 新增憑證名稱和主體。

    3. 建議的有效期間最多為 12 個月。 其餘的值可以保留為預設值。

    4. 選取 [建立]。

    Screenshot of creating certificate in the Azure portal.

    注意

    建立憑證之後,其可能會顯示為 [已停用]。 請重新整理網站,憑證將顯示為 [已啟用]。

  2. 瀏覽至新的憑證,然後選取憑證最新版本的資料列。 選取 [以 CER 格式下載],以儲存憑證的公開金鑰。

    Screenshot of certificate in the Azure portal where you can view and download the certificate.

    注意

    這不需要在 SQL Server 主機上完成。 相反地,任何用戶端將會下一個步驟中存取 Azure 入口網站。

  3. 在 Azure 入口網站中,瀏覽至先前建立的應用程式註冊,然後選取 [憑證] 清單

    1. 選取 [上傳憑證]。
    2. 選取在上一個步驟下載的公開金鑰 (.cer 檔案)。
    3. 選取 [新增]。

    Screenshot of certificate and secrets menu in the Azure portal.

  4. 在 Azure 入口網站中,瀏覽至儲存憑證的 Azure Key Vault 執行個體,然後從導覽功能表中選取 [存取原則]

    1. 選取 建立

    2. 針對 [秘密權限],選取 [取得] 和 [清單]。

    3. 針對 [憑證權限],選取 [取得] 和 [清單]。

    4. 選取 [下一步]。

    5. 在 [主體] 頁面,搜尋 [機器 - Azure Arc] 執行個體的名稱,它是 SQL Server 主機的主機名稱。

      Screenshot of Azure Arc server resource in portal.

    6. 透過選取 [下一步] 兩次,或選取 [檢閱 + 建立],略過 [應用程式 (選用)] 頁面。

      確認主體的「物件 ID」符合指派至執行個體之受控識別的主體 ID

      Screenshot of Azure portal to review and create access policy.

      若要確認,請移至資源頁面,然後選取 [概觀] 頁面上 [基本資料] 方塊右上方的 [JSON 檢視]。 在 [身分識別] 底下,您將發現 principalId

      Screenshot of portal control of JSON view of machine definition.

    7. 選取 [建立]

    必須選取 [建立],以確保權限已套用。 若要確保權限已儲存,請重新整理瀏覽器視窗,並檢查 Azure Arc 執行個體的資料列是否仍然存在。

    Screenshot of adding access policy to the key vault in the Azure portal.

透過 Azure 入口網站設定 SQL Server 的 Microsoft Entra 驗證

注意

使用 Azure CLIPowerShellARM 範本,來設定適用於 SQL Server 的 Microsoft Entra 系統管理員。

  1. 前往 Azure 入口網站,然後選取 [SQL Server – Azure Arc],接著選取 SQL Server 主機的執行個體。

  2. 檢查 SQL Server - Azure Arc 資源的狀態,並前往 [屬性] 功能表查看是否已連線。 如需詳細資訊,請參閱驗證 SQL Server - Azure Arc 資源

  3. 從資源功能表中選取 [設定] 下的 [Microsoft Entra ID 和 Purview]

  4. 選取 [設定管理員] 以開啟 [Microsoft Entra ID] 窗格,然後選擇將作為系統管理員登入名新增至 SQL Server 的帳戶。

  5. 選取 [客戶管理的憑證],接著再選取憑證

  6. 選取 [變更憑證],然後選取您稍早在新窗格中建立的 AKV 執行個體和憑證。

  7. 選取 [客戶管理的應用程式註冊]。

  8. 選取 [變更應用程式註冊],然後選取您稍早建立的應用程式註冊。

  9. 選取 [儲存]。 這會將要求傳送至 Arc 伺服器代理,以設定該 SQL Server 執行個體的 Microsoft Entra 驗證。

    Screenshot of setting Microsoft Entra authentication in the Azure portal.

    下載憑證並完成設定需要幾分鐘的時間。 在 Azure 入口網站設定所有參數並選取 [儲存] 後,系統可能會顯示以下訊息:SQL Server's Azure Arc agent is currently processing a request. Values below may be incorrect. Please wait until the agent is done before continuing。 等到儲存過程確認為 Saved successfully 後,再嘗試 Microsoft Entra 登入。

    上一個動作完成後才能更新 Azure Arc 伺服器代理程式。 換言之,如果在上一個動作完成前儲存新的 Microsoft Entra 設定,可能會導致失敗。 如果您在選取 [儲存] 後看到訊息:擴充呼叫失敗,請等候 5 分鐘並再試一次。

    注意

    一旦將 Microsoft Entra 系統管理員登入授與給 sysadmin 角色,變更 Azure 入口網站中的 Microsoft Entra 系統管理員時,將不會移除已保留為 sysadmin 的先前登入。 若要移除登入,您必須手動卸載該登入。

    當透過 SQL Server 的 Azure Arc 代理程式完成程序後,SQL Server 執行個體的 Microsoft Entra 系統管理員變更即可立即執行,而不需重新啟動伺服器。 若要讓新的系統管理員顯示在 sys.server_principals 中,必須重新啟動 SQL Server 執行個體,屆時系統才會顯示舊的系統管理員。 目前的 Microsoft Entra 系統管理員可以簽入 Azure 入口網站。

建立登入和使用者

當 SQL Server 主機上的 Azure Arc 代理程式完成其作業後,在入口網站的 Microsoft Entra ID 功能表中選取的系統管理員帳戶將會是 SQL Server 執行個體上的 sysadmin。 使用 SSMSAzure Data Studio 等用戶端,使用在伺服器上具有 sysadmin 權限的 Microsoft Entra 系統管理員帳戶登入 SQL Server。

注意

所有透過 Microsoft Entra 驗證而完成的 SQL Server 連線作業都需要經過加密。 如果資料庫管理員 (DBA) 尚未設定伺服器的受信任 SSL/TLS 憑證,登入可能會失敗,並顯示訊息:憑證鏈結是由不受信任的授權單位所簽發。若要修正此問題,請將 SQL Server 執行個體設定為使用用戶端信任的 SSL/TLS 憑證,或選取進階連線屬性中的 [信任伺服器憑證]。 如需詳細資訊,請參閱啟用資料庫引擎的加密連線

建立登入語法

在 Azure SQL 資料庫和 Azure SQL 受控執行個體上建立 Microsoft Entra 登入和使用者所用的相同語法,現在可用於 SQL Server 中。

注意

在 SQL Server 上,具有 ALTER ANY LOGINALTER ANY USER 權限的任何帳戶都可以分別為使用者建立 Microsoft Entra 登入。 帳戶不需要是 Microsoft Entra 登入。

若要建立 Microsoft Entra 帳戶的登入,請在 master 資料庫中執行下列 T-SQL 命令:

CREATE LOGIN [principal_name] FROM EXTERNAL PROVIDER;

對於使用者,主體名稱的格式應該是 user@tenant.com。 在 Microsoft Entra ID 中,這是使用者主體名稱。 對於所有其他帳戶類型,例如 Microsoft Entra 群組或應用程式,主體名稱是 Microsoft Entra 物件的名稱。

以下是部分範例:

-- login creation for Microsoft Entra user
CREATE LOGIN [user@contoso.com] FROM EXTERNAL PROVIDER;
GO
-- login creation for Microsoft Entra group
CREATE LOGIN [my_group_name] FROM EXTERNAL PROVIDER;
GO
-- login creation for Microsoft Entra application
CREATE LOGIN [my_app_name] FROM EXTERNAL PROVIDER;
GO

若要列出 master 資料庫中的 Microsoft Entra 登入,請執行 T-SQL 命令:

SELECT * FROM sys.server_principals
WHERE type IN ('E', 'X');

若要將 Microsoft Entra 使用者成員資格授與給 sysadmin 角色 (例如 admin@contoso.com),請在 master 中執行下列命令:

CREATE LOGIN [admin@contoso.com] FROM EXTERNAL PROVIDER; 
GO
ALTER SERVER ROLE sysadmin ADD MEMBER [admin@contoso.com];
GO

sp_addsrvrolemember 預存程序必須以 SQL Server sysadmin 伺服器角色的成員身分執行。

建立使用者語法

您可以從 Microsoft Entra ID 建立資料庫使用者,將其作爲與伺服器主體 (登入) 相關聯的資料庫使用者,或作為自主資料庫使用者。

若要從 SQL Server 資料庫中的 Microsoft Entra 登入建立 Microsoft Entra 使用者,請使用下列語法:

CREATE USER [principal_name] FROM LOGIN [principal_name];

principal_name 語法與登入所用的語法相同。

以下是一些範例:

-- for Azure AD user
CREATE USER [user@contoso.com] FROM LOGIN [user@contoso.com];
GO
-- for Azure AD group
CREATE USER [my_group_name] FROM LOGIN [my_group_name];
GO
-- for Azure AD application
CREATE USER [my_app_name] FROM LOGIN [my_app_name];
GO

若要建立 Microsoft Entra 自主資料庫使用者 (未繫結至伺服器登入的使用者),可以執行下列語法:

CREATE USER [principal name] FROM EXTERNAL PROVIDER;

從群組或應用程式建立 Microsoft Entra 資料庫使用者時,請使用 Microsoft Entra 群組名稱或 Microsoft Entra 應用程式名稱作爲 <principal name>

以下是一些範例:

-- for Azure AD contained user
CREATE USER [user@contoso.com] FROM EXTERNAL PROVIDER;
GO
-- for Azure AD contained group
CREATE USER [my_group_name] FROM EXTERNAL PROVIDER;
GO
--for Azure AD contained application
CREATE USER [my_group_name] FROM EXTERNAL PROVIDER;
GO

若要列出資料庫中建立的使用者,請執行下列 T-SQL 命令:

SELECT * FROM sys.database_principals;

根據預設,新的資料庫使用者會獲得 Connect 權限。 所有其他 SQL Server 權限都必須由獲授權的授與者明確授與。

Microsoft Entra 來賓帳戶

CREATE LOGINCREATE USER 語法也支援來賓使用者。 例如,如果 testuser@outlook.com 受邀加入 contoso.com 租使用者,則可以將它新增為與建立任何其他 Microsoft Entra 使用者或登入相同的語法來登入 SQL Server。 建立來賓使用者和登入時,請使用來賓帳戶的原始電子郵件,而不是租使用者中的用戶主體名稱。 在範例中, outlook.com 即使帳戶已在租用戶中註冊, contoso.com 也會提供 。

從現有登入建立來賓使用者

CREATE USER [testuser@outlook.com] FROM LOGIN [testuser@outlook.com];

將來賓使用者建立為內含的使用者

CREATE USER [testuser@outlook.com] FROM EXTERNAL PROVIDER;

使用支援的驗證方法連線

SQL Server 支援多種 Microsoft Entra 驗證方法:

  • 預設
  • 使用者名稱與密碼
  • 已整合
  • 與多重要素驗證通用
  • 服務主體
  • 受控識別
  • 存取權杖

使用下列其中一種方法連線至 SQL Server 執行個體。 如需詳細資訊,請參閱適用於 SQL Server 的 Microsoft Entra 驗證

使用 SSMS 的驗證範例

注意

雖然 Microsoft Entra ID 是 Azure Active Directory (Azure AD) 的新名稱,但為了防止干擾現有的環境,Azure AD 仍會保留在某些硬式編碼元素中,如 UI 欄位、連線供應商、錯誤碼與 Cmdlet。 在本文章中,這兩個名稱是可互換的。

以下是使用 Azure Active Directory - 與 MFA 通用驗證方法的 SQL Server Management Studio (SSMS) 連線頁面快照集。

Screenshot SSMS showing the Connect to Server window.

在驗證程序期間,必須在 SSMS 中明確指出使用者建立所在的資料庫。 請依序展開 [選項] > [連線屬性] > [連線到資料庫:database_name]。

如需詳細資訊,請參閱使用 Microsoft Entra 多重要素驗證

SQL Server 工具支援 Azure SQL 的 Microsoft Entra 驗證,同時也支援 SQL Server 2022 (16.x)。

儲存 Microsoft Entra ID 參數的位置

警告

Microsoft Entra ID 參數由 Azure Arc 代理程式設定,不應手動重新設定。

在 Linux 上,Microsoft Entra ID 參數會儲存在 mssql-conf 中。 如需 Linux 中設定選項的詳細資訊,請參閱使用 mssql-conf 工具設定 Linux 上的 SQL Server

已知問題

  • 更新憑證不會傳播:
    • 針對 SQL Server 設定 Microsoft Entra 驗證之後,SQL Server - Azure Arc 資源的 [Microsoft Entra ID 和 Purview] 窗格中的憑證更新作業可能無法完全傳播。 這會導致儲存成功,但系統仍顯示舊的值。 若要更新憑證,請執行下列步驟︰

      • 選取 [移除系統管理員]。
      • 選取 [儲存]。
      • 選取 [設定系統管理員],並使用新的憑證重新設定 Microsoft Entra 驗證。
      • 選取 [儲存]。

另請參閱