教學課程:使用 Microsoft Entra 登入保護 - Azure SQL 受控執行個體

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

在本文中,瞭解如何使用 Microsoft Entra ID(先前稱為 Azure Active Directory)所支援的伺服器主體(登入)來保護 Azure SQL 受控執行個體

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

  • 建立受控實例的 Microsoft Entra 登入
  • 將許可權授與受控實例中的登入
  • 從登入建立 Microsoft Entra 使用者
  • 將許可權指派給使用者及管理資料庫安全性
  • 搭配使用者使用模擬
  • 搭配使用者使用跨資料庫查詢
  • 了解安全性功能,例如威脅防護、稽核、數據遮罩和加密

注意

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

必要條件

若要完成本教學課程,請確定您具有下列必要條件:

限制存取

受控實例可以透過私人IP位址存取。 與隔離的 SQL Server 環境類似,應用程式或使用者需要存取 SQL 受管理執行個體 網路 (VNet),才能建立連線。 如需詳細資訊,請參閱將您的應用程式連線到SQL 受控執行個體

您也可以在受控實例上設定服務端點,讓公用連線的方式與 Azure SQL 資料庫 相同。 如需詳細資訊,請參閱在 Azure SQL 受控執行個體中設定公用端點

使用 SSMS 建立 Microsoft Entra 登入

第一個 Microsoft Entra 登入可由 SQL 系統管理員或布建期間建立的 Microsoft Entra 系統管理員建立。 如需詳細資訊,請參閱布建 microsoft Entra administrator for SQL 受管理執行個體

如需連線到 SQL 受管理執行個體 的範例,請參閱下列文章:

  1. 使用 任一個 sysadmin 連線 到受控實例SQL 登入或使用 SQL Server Management Studio (SSMS)Microsoft Entra 系統管理員。

  2. 物件總管 中,以滑鼠右鍵按下伺服器,然後選擇 [新增查詢]。

  3. 在查詢視窗中,使用下列語法來建立本機 Microsoft Entra 帳戶的登入:

    USE master
    GO
    CREATE LOGIN login_name FROM EXTERNAL PROVIDER
    GO
    

    此範例會建立帳戶 nativeuser@aadsqlmi.onmicrosoft.com的登入。

    USE master
    GO
    CREATE LOGIN [nativeuser@aadsqlmi.onmicrosoft.com] FROM EXTERNAL PROVIDER
    GO
    
  4. 在工具列上,選取 [ 執行 ] 以建立登入。

  5. 執行下列 T-SQL 命令,以檢查新增的登入:

    SELECT *  
    FROM sys.server_principals;  
    GO
    

    Screenshot of the Results tab in the S S M S Object Explorer showing the name, principal_id, sid, type, and type_desc of the newly added login.

如需詳細資訊,請參閱 CREATE LOGIN

授與建立登入的許可權

現有的登入必須具有適當的許可權,或屬於適當伺服器角色的一部分,才能建立其他 Microsoft Entra 登入。

SQL 驗證登入

  • 如果登入是以 SQL 驗證為基礎的伺服器主體,則必須獲指派 sysadmin 角色來建立 Microsoft Entra 帳戶的登入。

Microsoft Entra 驗證登入

  • 如果登入是 Microsoft Entra 伺服器主體,則必須獲 sysadmin 指派 或 securityadmin 伺服器角色,為其他 Microsoft Entra 使用者、群組和應用程式建立登入。
  • 至少 必須授與 ALTER ANY LOGIN 許可權,才能建立其他 Microsoft Entra 登入。
  • 根據預設,在 中 master 授與新建立 Microsoft Entra 登入的標準許可權為: CONNECT SQLVIEW ANY DATABASE
  • 伺服器 sysadmin 角色可以授與受控實例內的許多 Microsoft Entra 登入。

若要將登入新增至 sysadmin 伺服器角色:

  1. 再次登入受控實例,或使用與 Microsoft Entra 管理員或 SQL 主體的現有連線,也就是 sysadmin

  2. [物件總管] 中,以滑鼠右鍵按下伺服器,然後選擇 [新增查詢]。

  3. 使用下列 T-SQL 語法,授與 Microsoft Entra 登入 sysadmin 伺服器角色:

    ALTER SERVER ROLE sysadmin ADD MEMBER login_name
    GO
    

    下列範例會將 sysadmin 伺服器角色授與登入 nativeuser@aadsqlmi.onmicrosoft.com

    ALTER SERVER ROLE sysadmin ADD MEMBER [nativeuser@aadsqlmi.onmicrosoft.com]
    GO
    

使用 SSMS 建立其他 Microsoft Entra 登入

建立並授與 sysadmin 許可權之後,該登入就可以使用 FROM EXTERNAL PROVIDER 子句搭配 CREATE LOGIN 來建立其他登入。

  1. 連線 使用 Microsoft Entra 登入的受控實例,方法是選取 SQL Server Management Studio (SSMS) 中的 連線 至 Server

    1. 在 [伺服器名稱] 中輸入您的 SQL 受管理執行個體 主機名。
    2. 針對 [驗證],選取 [Active Directory - 通用與 MFA 支援] 以顯示多重要素驗證登入視窗。 登入。 如需詳細資訊,請參閱通用驗證(多重要素驗證的 SSMS 支援)。
  2. [物件總管] 中,以滑鼠右鍵按下伺服器,然後選擇 [新增查詢]。

  3. 在查詢視窗中,使用下列語法為另一個 Microsoft Entra 帳戶建立登入:

    USE master
    GO
    CREATE LOGIN login_name FROM EXTERNAL PROVIDER
    GO
    

    此範例會建立 Microsoft Entra 使用者的 bob@aadsqlmi.net登入,其網域 aadsqlmi.net 與 Microsoft Entra aadsqlmi.onmicrosoft.com 網域同盟

    執行下列 T-SQL 命令。 同盟 Microsoft Entra 帳戶是內部部署 Windows 登入和使用者的 SQL 受管理執行個體 取代專案。

    USE master
    GO
    CREATE LOGIN [bob@aadsqlmi.net] FROM EXTERNAL PROVIDER
    GO
    
  4. 使用 CREATE DATABASE 語法在受控實例中建立資料庫 。 此資料庫將用來測試下一節中的使用者登入。

    1. [物件總管] 中,以滑鼠右鍵按下伺服器,然後選擇 [新增查詢]。

    2. 在查詢視窗中,使用下列語法來建立名為 MyMITestDB 的資料庫。

      CREATE DATABASE MyMITestDB;
      GO
      
  5. 在 Microsoft Entra ID 中建立群組的 SQL 受管理執行個體 登入。 在將登入新增至 SQL 受管理執行個體 之前,群組必須存在於 Microsoft Entra ID 中。 請參閱 使用 Microsoft Entra ID 建立基本群組和新增成員。 建立群組 mygroup ,並將成員新增至此群組。

  6. 在 SQL Server Management Studio 中開啟新的查詢視窗。

    此範例假設 Microsoft Entra ID 中有一個名為 mygroup 的群組。 執行以下 命令:

    USE master
    GO
    CREATE LOGIN [mygroup] FROM EXTERNAL PROVIDER
    GO
    
  7. 作為測試,請使用新建立的登入或群組登入受控實例。 開啟與受控實例的新連線,並在驗證時使用新的登入。

  8. [物件總管] 中,以滑鼠右鍵按兩下伺服器,然後選擇 [新連線的新查詢]。

  9. 執行下列命令,以檢查新建立的 Microsoft Entra 登入的伺服器權限:

    SELECT * FROM sys.fn_my_permissions (NULL, 'DATABASE')
    GO
    

Azure SQL 支援 Microsoft Entra 主體,因為使用者和登入會延伸到 Microsoft Entra 外部 ID 內部和外部來賓使用者。 來賓使用者,無論是個別還是群組的一部分,都可以與 Azure SQL 中任何其他 Microsoft Entra 使用者相同。 如果您希望來賓用戶能夠建立其他 Microsoft Entra 伺服器登入或資料庫用戶,他們必須擁有許可權才能讀取 Microsoft Entra 目錄中的其他身分識別。 此許可權是在目錄層級設定。 如需詳細資訊,請參閱 Microsoft Entra ID 中的來賓訪問許可權。

從 Microsoft Entra 登入建立 Microsoft Entra 使用者

對個別資料庫的授權的運作方式與 SQL Server 中的資料庫相同,SQL 受管理執行個體。 您可以從授與該資料庫許可權之資料庫中的現有登入,或新增至資料庫角色,建立使用者。

既然我們已建立名為 MyMITestDB 的資料庫,而且只有默認許可權的登入,下一個步驟是從該登入建立使用者。 目前,登入可以連線到受控實例,並查看所有資料庫,但無法與資料庫互動。 如果您使用具有默認許可權的 Microsoft Entra 帳戶登入,並嘗試展開新建立的資料庫,您會看到下列錯誤:

Screenshot of an error message from the the S S M S Object Explorer that reads

如需授與資料庫許可權的詳細資訊,請參閱開始使用 資料庫引擎 許可權

建立 Microsoft Entra 使用者並建立範例數據表

注意

當使用者以 Microsoft Entra 群組的一部分身分登入時,會有一些限制。 例如,呼叫 SUSER_SID 會傳回 NULL,因為指定的 Microsoft Entra 使用者不是數據表的 sys.server_principals 一部分。 因此,在某些情況下,某些預存程式或已授與許可權清單的存取可能會受到限制。

  1. 使用 sysadmin SQL Server Management Studio 的帳戶登入受控實例。

  2. [物件總管] 中,以滑鼠右鍵按下伺服器,然後選擇 [新增查詢]。

  3. 在查詢視窗中,使用下列語法從 Microsoft Entra 登入建立使用者:

    USE <Database Name> -- provide your database name
    GO
    CREATE USER user_name FROM LOGIN login_name
    GO
    

    下列範例會從登入bob@aadsqlmi.net建立使用者bob@aadsqlmi.net:

    USE MyMITestDB
    GO
    CREATE USER [bob@aadsqlmi.net] FROM LOGIN [bob@aadsqlmi.net]
    GO
    
  4. 它也支援從群組的 Microsoft Entra 登入建立 Microsoft Entra 使用者。

    下列範例會為存在於 Microsoft Entra 租使用者中的 Microsoft Entra 群組 mygroup 建立登入。

    USE MyMITestDB
    GO
    CREATE USER [mygroup] FROM LOGIN [mygroup]
    GO
    

    屬於 mygroup 的所有使用者都可以存取 MyMITestDB 資料庫。

    重要

    從 Microsoft Entra 登入建立 USER 時,請指定 user_name 做為 LOGIN 的相同login_name。

    如需詳細資訊,請參閱 CREATE USER

  5. 在新的查詢視窗中,使用下列 T-SQL 命令建立測試資料表:

    USE MyMITestDB
    GO
    CREATE TABLE TestTable
    (
    AccountNum varchar(10),
    City varchar(255),
    Name varchar(255),
    State varchar(2)
    );
    
  6. 使用已建立的使用者,在 SSMS 中建立連線。 您會發現,您無法看到先前建立sysadmin的 TestTable 數據表。 我們需要為使用者提供從資料庫讀取數據的許可權。

  7. 您可以執行下列命令來檢查使用者目前擁有的權限:

    SELECT * FROM sys.fn_my_permissions('MyMITestDB','DATABASE')
    GO
    

將使用者新增至資料庫層級角色

若要讓使用者查看資料庫中的數據,我們可以為使用者提供 資料庫層級角色

  1. 使用 sysadmin SQL Server Management Studio 的帳戶登入受控實例。

  2. 物件總管 中,以滑鼠右鍵按下伺服器,然後選擇 [新增查詢]。

  3. 使用下列 T-SQL 語法,將資料庫角色授與 Microsoft Entra 使用者 db_datareader

    Use <Database Name> -- provide your database name
    ALTER ROLE db_datareader ADD MEMBER user_name
    GO
    

    下列範例提供具有 MyMITestDB 資料庫許可權的使用者bob@aadsqlmi.net和群組 mygroupdb_datareader

    USE MyMITestDB
    GO
    ALTER ROLE db_datareader ADD MEMBER [bob@aadsqlmi.net]
    GO
    ALTER ROLE db_datareader ADD MEMBER [mygroup]
    GO
    
  4. 執行下列命令來檢查資料庫中建立的 Microsoft Entra 使用者是否存在:

    SELECT * FROM sys.database_principals
    GO
    
  5. 使用已新增至 db_datareader 角色的使用者,建立與受控實例的新連線。

  6. 展開 物件總管中的資料庫以查看數據表。

    Screenshot from Object Explorer in S S M S showing the folder structure for Tables in MyMITestDB. The dbo.TestTable folder is highlighted.

  7. 開啟新的查詢視窗,然後執行下列 SELECT 語句:

    SELECT *
    FROM TestTable
    

    您是否可以看到數據表中的數據? 您應該會看到傳回的數據行。

    Screenshot of the Results tab in the S S M S Object Explorer showing the table column headers AccountNum, City, Name, and State.

模擬 Microsoft Entra 登入

SQL 受管理執行個體 支援 Microsoft Entra 登入的模擬。

測試模擬

  1. 使用 sysadmin SQL Server Management Studio 的帳戶登入受控實例。

  2. [物件總管] 中,以滑鼠右鍵按下伺服器,然後選擇 [新增查詢]。

  3. 在查詢視窗中,使用下列命令來建立新的預存程式:

    USE MyMITestDB
    GO  
    CREATE PROCEDURE dbo.usp_Demo  
    WITH EXECUTE AS 'bob@aadsqlmi.net'  
    AS  
    SELECT user_name();  
    GO
    
  4. 使用下列命令來檢視您在執行預存程式時仿真的使用者為 bob@aadsqlmi.net

    Exec dbo.usp_Demo
    
  5. 使用 EXECUTE AS LOGIN 語句測試模擬:

    EXECUTE AS LOGIN = 'bob@aadsqlmi.net'
    GO
    SELECT SUSER_SNAME()
    REVERT
    GO
    

注意

只有屬於角色的 sysadmin SQL 伺服器層級登入,才能執行以 Microsoft Entra 主體為目標的下列作業:

  • EXECUTE AS USER
  • EXECUTE AS LOGIN

使用跨資料庫查詢

使用 Microsoft Entra 登入的 Microsoft Entra 帳戶支援跨資料庫查詢。 若要使用 Microsoft Entra 群組測試跨資料庫查詢,我們需要建立另一個資料庫和數據表。 如果已有資料庫,您可以略過建立另一個資料庫和數據表。

  1. 使用 sysadmin SQL Server Management Studio 的帳戶登入受控實例。

  2. [物件總管] 中,以滑鼠右鍵按下伺服器,然後選擇 [新增查詢]。

  3. 在查詢視窗中,使用下列命令來建立名為 MyMITestDB2 的資料庫和名為 TestTable2資料表:

    CREATE DATABASE MyMITestDB2;
    GO
    USE MyMITestDB2
    GO
    CREATE TABLE TestTable2
    (
    EmpId varchar(10),
    FirstName varchar(255),
    LastName varchar(255),
    Status varchar(10)
    );
    
  4. 在新的查詢視窗中,執行下列命令,在新的資料庫 MyMITestDB2 中建立使用者 mygroup,並將該資料庫的 SELECT 許可權授與 mygroup

    USE MyMITestDB2
    GO
    CREATE USER [mygroup] FROM LOGIN [mygroup]
    GO
    GRANT SELECT TO [mygroup]
    GO
    
  5. 使用 SQL Server Management Studio 作為 Microsoft Entra 群組 mygroup 的成員登入受控實例。 開啟新的查詢視窗,然後執行跨資料庫 SELECT 語句:

    USE MyMITestDB
    SELECT * FROM MyMITestDB2..TestTable2
    GO
    

    您應該會看到 TestTable2 的數據表結果

其他支援的案例

  • Microsoft Entra 登入支援 SQL Agent 管理和作業執行。
  • Microsoft Entra 登入可以執行資料庫備份和還原作業。
  • 稽核 與 Microsoft Entra 登入和驗證事件相關的所有語句。
  • 屬於伺服器角色成員之 Microsoft Entra 登入的 sysadmin 專用系統管理員連線。
  • 使用 sqlcmd 公用程式和SQL Server Management Studio 工具支援 Microsoft Entra 登入。
  • 登入觸發程式支援來自 Microsoft Entra 登入的登入事件。
  • 您可以使用 Microsoft Entra 登入來設定 Service Broker 和 DB 郵件。

下一步

啟用安全性功能

如需保護資料庫方式的完整清單,請參閱 SQL 受管理執行個體 安全性功能一文。 將會討論的安全性功能如下:

SQL 受控執行個體功能

如需 SQL 受管理執行個體 功能的完整概觀,請參閱: