教學課程:使用 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)。
必要條件
若要完成本教學課程,請確定您具有下列必要條件:
- SQL Server Management Studio (SSMS)
- 受控實例
- 請遵循這篇文章: 快速入門:建立受控實例
- 能夠存取受控實例,併為 受控實例布建 Microsoft Entra 系統管理員。 若要深入瞭解,請參閱:
限制存取
受控實例可以透過私人IP位址存取。 與隔離的 SQL Server 環境類似,應用程式或使用者需要存取 SQL 受管理執行個體 網路 (VNet),才能建立連線。 如需詳細資訊,請參閱將您的應用程式連線到SQL 受控執行個體。
您也可以在受控實例上設定服務端點,讓公用連線的方式與 Azure SQL 資料庫 相同。 如需詳細資訊,請參閱在 Azure SQL 受控執行個體中設定公用端點。
使用 SSMS 建立 Microsoft Entra 登入
第一個 Microsoft Entra 登入可由 SQL 系統管理員或布建期間建立的 Microsoft Entra 系統管理員建立。 如需詳細資訊,請參閱布建 microsoft Entra administrator for SQL 受管理執行個體。
如需連線到 SQL 受管理執行個體 的範例,請參閱下列文章:
使用 任一個
sysadmin
連線 到受控實例SQL 登入或使用 SQL Server Management Studio (SSMS) 的 Microsoft Entra 系統管理員。在 物件總管 中,以滑鼠右鍵按下伺服器,然後選擇 [新增查詢]。
在查詢視窗中,使用下列語法來建立本機 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
在工具列上,選取 [ 執行 ] 以建立登入。
執行下列 T-SQL 命令,以檢查新增的登入:
SELECT * FROM sys.server_principals; GO
如需詳細資訊,請參閱 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 SQL 和 VIEW ANY DATABASE。 - 伺服器
sysadmin
角色可以授與受控實例內的許多 Microsoft Entra 登入。
若要將登入新增至 sysadmin
伺服器角色:
再次登入受控實例,或使用與 Microsoft Entra 管理員或 SQL 主體的現有連線,也就是
sysadmin
。在 [物件總管] 中,以滑鼠右鍵按下伺服器,然後選擇 [新增查詢]。
使用下列 T-SQL 語法,授與 Microsoft Entra 登入
sysadmin
伺服器角色:ALTER SERVER ROLE sysadmin ADD MEMBER login_name GO
下列範例會將
sysadmin
伺服器角色授與登入 nativeuser@aadsqlmi.onmicrosoft.comALTER SERVER ROLE sysadmin ADD MEMBER [nativeuser@aadsqlmi.onmicrosoft.com] GO
使用 SSMS 建立其他 Microsoft Entra 登入
建立並授與 sysadmin
許可權之後,該登入就可以使用 FROM EXTERNAL PROVIDER 子句搭配 CREATE LOGIN 來建立其他登入。
連線 使用 Microsoft Entra 登入的受控實例,方法是選取 SQL Server Management Studio (SSMS) 中的 連線 至 Server。
- 在 [伺服器名稱] 中輸入您的 SQL 受管理執行個體 主機名。
- 針對 [驗證],選取 [Active Directory - 通用與 MFA 支援] 以顯示多重要素驗證登入視窗。 登入。 如需詳細資訊,請參閱通用驗證(多重要素驗證的 SSMS 支援)。
在 [物件總管] 中,以滑鼠右鍵按下伺服器,然後選擇 [新增查詢]。
在查詢視窗中,使用下列語法為另一個 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
使用 CREATE DATABASE 語法在受控實例中建立資料庫 。 此資料庫將用來測試下一節中的使用者登入。
在 [物件總管] 中,以滑鼠右鍵按下伺服器,然後選擇 [新增查詢]。
在查詢視窗中,使用下列語法來建立名為 MyMITestDB 的資料庫。
CREATE DATABASE MyMITestDB; GO
在 Microsoft Entra ID 中建立群組的 SQL 受管理執行個體 登入。 在將登入新增至 SQL 受管理執行個體 之前,群組必須存在於 Microsoft Entra ID 中。 請參閱 使用 Microsoft Entra ID 建立基本群組和新增成員。 建立群組 mygroup ,並將成員新增至此群組。
在 SQL Server Management Studio 中開啟新的查詢視窗。
此範例假設 Microsoft Entra ID 中有一個名為 mygroup 的群組。 執行以下 命令:
USE master GO CREATE LOGIN [mygroup] FROM EXTERNAL PROVIDER GO
作為測試,請使用新建立的登入或群組登入受控實例。 開啟與受控實例的新連線,並在驗證時使用新的登入。
在 [物件總管] 中,以滑鼠右鍵按兩下伺服器,然後選擇 [新連線的新查詢]。
執行下列命令,以檢查新建立的 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 帳戶登入,並嘗試展開新建立的資料庫,您會看到下列錯誤:
如需授與資料庫許可權的詳細資訊,請參閱開始使用 資料庫引擎 許可權。
建立 Microsoft Entra 使用者並建立範例數據表
注意
當使用者以 Microsoft Entra 群組的一部分身分登入時,會有一些限制。
例如,呼叫 SUSER_SID
會傳回 NULL
,因為指定的 Microsoft Entra 使用者不是數據表的 sys.server_principals
一部分。
因此,在某些情況下,某些預存程式或已授與許可權清單的存取可能會受到限制。
使用
sysadmin
SQL Server Management Studio 的帳戶登入受控實例。在 [物件總管] 中,以滑鼠右鍵按下伺服器,然後選擇 [新增查詢]。
在查詢視窗中,使用下列語法從 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
它也支援從群組的 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。
在新的查詢視窗中,使用下列 T-SQL 命令建立測試資料表:
USE MyMITestDB GO CREATE TABLE TestTable ( AccountNum varchar(10), City varchar(255), Name varchar(255), State varchar(2) );
使用已建立的使用者,在 SSMS 中建立連線。 您會發現,您無法看到先前建立
sysadmin
的 TestTable 數據表。 我們需要為使用者提供從資料庫讀取數據的許可權。您可以執行下列命令來檢查使用者目前擁有的權限:
SELECT * FROM sys.fn_my_permissions('MyMITestDB','DATABASE') GO
將使用者新增至資料庫層級角色
若要讓使用者查看資料庫中的數據,我們可以為使用者提供 資料庫層級角色 。
使用
sysadmin
SQL Server Management Studio 的帳戶登入受控實例。在 物件總管 中,以滑鼠右鍵按下伺服器,然後選擇 [新增查詢]。
使用下列 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和群組 mygroup
db_datareader
:USE MyMITestDB GO ALTER ROLE db_datareader ADD MEMBER [bob@aadsqlmi.net] GO ALTER ROLE db_datareader ADD MEMBER [mygroup] GO
執行下列命令來檢查資料庫中建立的 Microsoft Entra 使用者是否存在:
SELECT * FROM sys.database_principals GO
使用已新增至
db_datareader
角色的使用者,建立與受控實例的新連線。展開 物件總管中的資料庫以查看數據表。
開啟新的查詢視窗,然後執行下列 SELECT 語句:
SELECT * FROM TestTable
您是否可以看到數據表中的數據? 您應該會看到傳回的數據行。
模擬 Microsoft Entra 登入
SQL 受管理執行個體 支援 Microsoft Entra 登入的模擬。
測試模擬
使用
sysadmin
SQL Server Management Studio 的帳戶登入受控實例。在 [物件總管] 中,以滑鼠右鍵按下伺服器,然後選擇 [新增查詢]。
在查詢視窗中,使用下列命令來建立新的預存程式:
USE MyMITestDB GO CREATE PROCEDURE dbo.usp_Demo WITH EXECUTE AS 'bob@aadsqlmi.net' AS SELECT user_name(); GO
使用下列命令來檢視您在執行預存程式時仿真的使用者為 bob@aadsqlmi.net。
Exec dbo.usp_Demo
使用 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 群組測試跨資料庫查詢,我們需要建立另一個資料庫和數據表。 如果已有資料庫,您可以略過建立另一個資料庫和數據表。
使用
sysadmin
SQL Server Management Studio 的帳戶登入受控實例。在 [物件總管] 中,以滑鼠右鍵按下伺服器,然後選擇 [新增查詢]。
在查詢視窗中,使用下列命令來建立名為 MyMITestDB2 的資料庫和名為 TestTable2 的資料表:
CREATE DATABASE MyMITestDB2; GO USE MyMITestDB2 GO CREATE TABLE TestTable2 ( EmpId varchar(10), FirstName varchar(255), LastName varchar(255), Status varchar(10) );
在新的查詢視窗中,執行下列命令,在新的資料庫 MyMITestDB2 中建立使用者 mygroup,並將該資料庫的 SELECT 許可權授與 mygroup:
USE MyMITestDB2 GO CREATE USER [mygroup] FROM LOGIN [mygroup] GO GRANT SELECT TO [mygroup] GO
使用 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 受管理執行個體 功能的完整概觀,請參閱:
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應