教學課程:使用 Microsoft Entra 登入保護 - Azure SQL 受控執行個體
適用於:Azure SQL 受控執行個體
在本文中,了解如何使用由 Microsoft Entra ID (先前稱為 Azure Active Directory) 支援的伺服器主體 (登入) 來保護 Azure SQL 受控執行個體。
在本教學課程中,您會了解如何:
- 為受控執行個體建立 Microsoft Entra 登入
- 授予受控執行個體中的登入權限
- 從登入建立 Microsoft Entra 使用者
- 將權限指派給使用者並管理資料庫安全性
- 與使用者一起使用模擬
- 與使用者一起使用跨資料庫查詢
- 了解安全性功能,例如威脅防護、稽核、資料遮罩和加密
注意
Microsoft Entra ID 先前稱為 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 管理員建立。 如需詳細資訊,請參閱針對 SQL 受控執行個體佈建 Microsoft Entra 系統管理員。
如需連線到 SQL 受控執行個體的範例,請參閱下列文章:
透過使用 SQL Server Management Studio (SSMS),藉助
sysadmin
SQL 登入或 Microsoft Entra 管理員連線到您的受控執行個體。在 [物件總管] 中,以滑鼠右鍵按一下伺服器,然後選擇 [新增查詢]。
在查詢視窗中,使用下列語法來建立本機 Microsoft Entra 帳戶的登入:
USE master GO CREATE LOGIN login_name FROM EXTERNAL PROVIDER GO
此範例會建立帳戶 [email protected] 的登入。
USE master GO CREATE LOGIN [[email protected]] FROM EXTERNAL PROVIDER GO
在工具列上,選取 [執行] 以建立登入。
透過執行下列 T-SQL 命令,檢查新增的登入:
SELECT * FROM sys.server_principals; GO
如需詳細資訊,請參閱建立登入。
授與權限以建立登入
現有的登入必須具有適當的權限,或屬於適當的伺服器角色,才能建立其他 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
伺服器角色授與登入 [email protected]ALTER SERVER ROLE sysadmin ADD MEMBER [[email protected]] GO
使用 SSMS 建立額外的 Microsoft Entra 登入
建立 Microsoft Entra 登入並授與 sysadmin
權限之後,該登入就可以搭配使用 FROM EXTERNAL PROVIDER 子句與 CREATE LOGIN 來建立其他登入。
透過選取 SQL Server Management Studio (SSMS) 中的 [連線到伺服器],使用 Microsoft Entra 登入來連線至受控執行個體。
- 在 [伺服器名稱] 中輸入您的 SQL 受控執行個體主機名稱。
- 針對 [驗證],選取 [Active Directory - 與 MFA 支援通用] 以啟動多重要素驗證登入視窗。 登入。 如需詳細資訊,請參閱通用驗證 (多重要素驗證的 SSMS 支援)。
在 [物件總管] 中,以滑鼠右鍵按一下伺服器,然後選擇 [新增查詢]。
在查詢視窗中,使用下列語法來建立另一個 Microsoft Entra 帳戶的登入:
USE master GO CREATE LOGIN login_name FROM EXTERNAL PROVIDER GO
此範例會建立 Microsoft Entra 使用者 [email protected] 的登入,其網域 aadsqlmi.net 與 Microsoft Entra aadsqlmi.onmicrosoft.com 網域同盟。
執行下列 T-SQL 命令。 同盟 Microsoft Entra 帳戶是內部部署 Windows 登入和使用者的 SQL 受控執行個體取代。
USE master GO CREATE LOGIN [[email protected]] 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 受控執行個體中的運作方式與 SQL Server 中的資料庫相同。 您可以從資料庫中的現有登入建立使用者,該使用者獲授與該資料庫的權限,或新增至資料庫角色。
既然我們已建立名為 MyMITestDB 的資料庫,以及僅擁有預設權限的登入,下一個步驟是從該登入建立使用者。 目前,登入可以連線到受控執行個體,並查看所有資料庫,但無法與資料庫互動。 如果您使用具有預設權限的 Microsoft Entra 帳戶登入,並嘗試展開新建立的資料庫,那麼您會看到下列錯誤:
如需授與資料庫權限詳細資訊,請參閱資料庫引擎權限使用者入門。
建立 Microsoft Entra 使用者並建立範例資料表
注意
當使用者以 Microsoft Entra 群組成員的身分登入時,會有一些限制。
例如,呼叫 SUSER_SID
會傳回 NULL
,因為指定的 Microsoft Entra 使用者不屬於 sys.server_principals
資料表。
因此,在本案例中,存取某些預存程序或已授與權限的清單可能會受到限制。
使用 SQL Server Management Studio 的
sysadmin
帳戶登入受控執行個體。在 [物件總管] 中,以滑鼠右鍵按一下伺服器,然後選擇 [新增查詢]。
在查詢視窗中,使用下列語法來從 Microsoft Entra 登入建立使用者:
USE <Database Name> -- provide your database name GO CREATE USER user_name FROM LOGIN login_name GO
下列範例會從登入 [email protected] 建立使用者 [email protected]:
USE MyMITestDB GO CREATE USER [[email protected]] FROM LOGIN [[email protected]] 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_name 指定為來自登入的相同 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
將使用者新增至資料庫層級角色
若要讓使用者查看資料庫中的資料,我們可以為使用者提供資料庫層級角色。
使用 SQL Server Management Studio 的
sysadmin
帳戶登入受控執行個體。在 [物件總管] 中,以滑鼠右鍵按一下伺服器,然後選擇 [新增查詢]。
使用下列 T-SQL 語法,授與 Microsoft Entra 使用者
db_datareader
資料庫角色:Use <Database Name> -- provide your database name ALTER ROLE db_datareader ADD MEMBER user_name GO
下列範例為使用者 [email protected] 和群組 mygroup 提供 MyMITestDB 資料庫的
db_datareader
權限:USE MyMITestDB GO ALTER ROLE db_datareader ADD MEMBER [[email protected]] 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 登入的模擬。
測試模擬
使用 SQL Server Management Studio 的
sysadmin
帳戶登入受控執行個體。在 [物件總管] 中,以滑鼠右鍵按一下伺服器,然後選擇 [新增查詢]。
在查詢視窗中,使用下列命令來建立新的預存程序:
USE MyMITestDB GO CREATE PROCEDURE dbo.usp_Demo WITH EXECUTE AS '[email protected]' AS SELECT user_name(); GO
使用下列命令,查看您在執行預存程序時模擬的使用者為 [email protected]。
Exec dbo.usp_Demo
使用 EXECUTE AS LOGIN 陳述式測試模擬:
EXECUTE AS LOGIN = '[email protected]' GO SELECT SUSER_SNAME() REVERT GO
注意
只有屬於 sysadmin
角色成員的 SQL Server 層級登入,才能執行下列目標為 Microsoft Entra 主體的作業:
- EXECUTE AS USER
- EXECUTE AS LOGIN
使用跨資料庫查詢
使用 Microsoft Entra 登入的 Microsoft Entra 帳戶,支援跨資料庫查詢。 若要使用 Microsoft Entra 群組測試跨資料庫查詢,我們需要建立另一個資料庫和資料表。 如果已存在資料庫,您可以略過建立另一個資料庫和資料表。
使用 SQL Server Management Studio 的
sysadmin
帳戶登入受控執行個體。在 [物件總管] 中,以滑鼠右鍵按一下伺服器,然後選擇 [新增查詢]。
在查詢視窗中,使用下列語法來建立名為 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 登入和驗證事件相關的所有陳述式。
- 屬於
sysadmin
伺服器角色成員的 Microsoft Entra 登入的專用管理員連接。 - 使用 sqlcmd 公用程式和 SQL Server Management Studio 工具支援 Microsoft Entra 登入。
- 來自 Microsoft Entra 登入的登入事件支援登入觸發程序。
- Service Broker 和 DB 郵件可使用 Microsoft Entra 登入來設定。
下一步
啟用安全性功能
請參閱 SQL 受控執行個體安全性功能一文,以取得完整的資料庫保護方式清單。 將會討論的安全性功能如下:
SQL 受控執行個體功能
如需 SQL 受控執行個體功能的完整概觀,請參閱: