共用方式為


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

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

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

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

  • 建立 SQL 受控執行個體的 Microsoft Entra 登入。
  • 授與 SQL 受控執行個體中登入的許可權。
  • 從登入建立 Microsoft Entra 使用者。
  • 將權限指派給使用者,並管理資料庫安全性。
  • 對使用者使用模擬。
  • 對使用者使用跨資料庫查詢。
  • 瞭解安全性功能,例如威脅防護、稽核、資料遮罩和加密。

注意

Microsoft Entra ID 先前稱為 Azure Active Directory (Azure AD)。

必要條件

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

限制存取

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

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

使用 SSMS 建立 Microsoft Entra 登入

SQL 系統管理員可以建立第一個 Microsoft Entra 登入,或在佈建期間建立的 Microsoft Entra 系統管理員。 如需詳細資訊,請參閱針對 SQL 受控執行個體佈建 Microsoft Entra 系統管理員

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

  1. 使用 SQL Server Management Studio (SSMS) 使用 sysadmin SQL 登入或 Microsoft Entra 系統管理員連線到您的 SQL 受控執行個體。

  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
    

    SSMS 物件總管中 [結果] 索引標籤的螢幕擷取畫面,顯示新新增登入的名稱、principal_id、sid、類型和type_desc。

如需詳細資訊,請參閱建立登入

授與權限以建立登入

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

SQL 驗證登入

如果登入是以 SQL 驗證為基礎的伺服器主體,則必須指派系統 管理員 角色,才能建立 Microsoft Entra 帳戶的登入。

Microsoft Entra 驗證登入

  • 如果登入是 Microsoft Entra 伺服器主體,則必須指派 sysadminsecurityadmin 伺服器角色,才能為其他 Microsoft Entra 使用者、群組和應用程式建立登入。
  • 至少必須 ALTER ANY LOGIN 授與權限才能建立其他 Microsoft Entra 登入。
  • 根據預設,授與新建立的 Microsoft Entra 登入 master 的標準許可權是 CONNECT SQLVIEW ANY DATABASE
  • 系統管理員伺服器角色可以授與 SQL 受控執行個體內的許多 Microsoft Entra 登入。

若要將登入新增至 系統管理員 伺服器角色:

  1. 再次登入 SQL 受控執行個體,或使用與 Microsoft Entra 系統管理員或 SQL 主體 ( 系統管理員) 的現有連線。

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

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

    ALTER SERVER ROLE sysadmin ADD MEMBER login_name
    GO
    

    下列範例會將 系統管理員 伺服器角色授與登入 nativeuser@aadsqlmi.onmicrosoft.com

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

使用 SSMS 建立額外的 Microsoft Entra 登入

建立 Microsoft Entra 登入並授與系統管理員許可權之後,該登入可以使用子FROM EXTERNAL PROVIDER句來CREATE LOGIN建立其他登入。

  1. 選取 [在 SQL Server Management Studio (SSMS) ] 中選取 [ 連線到伺服器 ],以使用 Microsoft Entra 登入連線到 SQL 受控執行個體。

    1. 在 [伺服器名稱] 中輸入您的 SQL 受控執行個體主機名稱。
    2. 針對 [驗證],選取 [Microsoft Entra 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 語法在 SQL 受控執行個體中建立資料庫。 此資料庫會用來測試下一節中的使用者登入。

    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. 作為測試,請使用新建立的登入或群組登入 SQL 受控執行個體。 開啟 SQL 受控執行個體的新連線,並在驗證時使用新的登入。

  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 受控執行個體中的運作方式與 SQL Server 中的資料庫相同。 您可以從已授與該資料庫許可權或新增至資料庫角色的資料庫中的現有登入建立使用者。

現在我們已經創建了一個名為 MyMITestDB 的資料庫和一個僅具有預設權限的登入,下一步是從該登入建立使用者。 目前,登入可以連線到 SQL 受控執行個體並查看所有資料庫,但無法與資料庫互動。 如果您使用具有預設許可權的 Microsoft Entra 帳戶登入,並嘗試展開新建立的資料庫,您會看到下列錯誤:

來自 SSMS 物件總管的錯誤訊息螢幕擷取畫面,其中顯示「無法存取資料庫 MyMITestDB。(ObjectExplorer)“。

如需授與資料庫權限詳細資訊,請參閱資料庫引擎權限使用者入門

建立 Microsoft Entra 使用者並建立範例資料表

注意

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

  1. 在 SQL Server Management Studio 中使用 sysadmin 帳戶登入您的 SQL 受控執行個體。

  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_name LOGIN

    如需詳細資訊,請參閱 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 中建立連線。 您會注意到,您看不到系統管理員先前建立的 TestTable 表格。 我們需要為使用者提供從資料庫讀取資料的權限。

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

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

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

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

  1. 使用 SQL Server Management Studio 以 系統管理員 帳戶登入 SQL 受控執行個體。

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

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

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

    下列範例會為使用者bob@aadsqlmi.net和群組 mygroup 提供 MyMITestDB 資料庫的db_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 角色的使用者建立與 SQL 受控執行個體的新連線。

  6. 展開 [物件總管] 中的資料庫,以查看資料表。

    SSMS 中物件總管的螢幕擷取畫面,顯示 MyMITestDB 中資料表的資料夾結構。dbo.TestTable 資料夾會反白顯示。

  7. 開啟新的查詢視窗並執行下列 SELECT 陳述式:

    SELECT *
    FROM TestTable
    

    是否可以查看資料表中的資料? 您應該會看到傳回的資料行,如下列螢幕擷取畫面所示:

    SSMS 物件總管中 [結果] 索引標籤的螢幕擷取畫面,顯示資料表資料行標頭 AccountNum、City、Name 和 State。

模擬 Microsoft Entra 登入

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

測試模擬

  1. 使用 SQL Server Management Studio 以 系統管理員 帳戶登入 SQL 受控執行個體。

  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
    

注意

只有屬於 系統管理員 角色的 SQL Server 層級登入才能執行下列以 Microsoft Entra 主體為目標的作業:

  • EXECUTE AS USER
  • EXECUTE AS LOGIN

使用跨資料庫查詢

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

  1. 使用 SQL Server Management Studio 以 系統管理員 帳戶登入 SQL 受控執行個體。

  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,並將該資料庫的權限授與 SELECTmygroup

    USE MyMITestDB2
    GO
    CREATE USER [mygroup] FROM LOGIN [mygroup]
    GO
    GRANT SELECT TO [mygroup]
    GO
    
  5. 使用 SQL Server Management Studio 以 Microsoft Entra 群組 mygroup 的成員身分登入 SQL 受控執行個體。 開啟新的查詢窗口,執行跨資料庫 SELECT 語句:

    USE MyMITestDB
    SELECT * FROM MyMITestDB2..TestTable2
    GO
    

    您應該會看到來自 TestTable2 的資料表結果。

其他支援的案例

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