適用於:✅Microsoft Fabric 中的 SQL 資料庫
本文說明 SQL 資料庫的驗證。
與其他Microsoft Fabric項目類型一樣,SQL 資料庫依賴 Microsoft Entra 認證。
要成功驗證身份至 SQL 資料庫,Microsoft Entra 使用者、服務主體或其群組,必須在 Fabric 中擁有資料庫的讀取項目權限。 關於如何授予Microsoft Entra身份存取 Fabric 工作空間或特定資料庫的資訊,請參見 Fabric 存取控制。
要在 Fabric 中找到你的 SQL 資料庫的連接字串,請參考 Microsoft Fabric 中的 連接至你的 SQL 資料庫。
注意
若要讓 服務主體 連線到 Fabric 和 SQL 資料庫,您也需要啟用 服務主體可以使用 Fabric API Fabric 租用戶設定。 若要了解如何啟用租用戶設定,請參閱 Fabric 租用戶設定。
使用 Microsoft Entra 認證連接 SQL 資料庫
你可以透過以下方式使用 Microsoft Entra 認證連接資料庫:
- 支援 Microsoft Entra 驗證的 SQL 工具,包括 SQL Server Management Studio 和 Visual Studio Code 的 MSSQL 擴充功能。
- 使用 SQL 用戶端驅動程式支援 Microsoft Entra 認證的應用程式,包括 SqlClient、JDBC、ODBC,以及 OLE DB。
應用程式與工具必須升級驅動程式至支援Microsoft Entra認證的版本,並在其 SQL connection string 中加入驗證模式關鍵字,如 ActiveDirectoryInteractive、ActiveDirectoryServicePrincipal 或 ActiveDirectoryPassword。
建立供 Microsoft Entra 身份識別使用的資料庫使用者
如果你打算用 Transact-SQL 配置 SQL 存取控制,首先需要建立對應你的 Microsoft Entra 身份 - 使用者、服務主體或其群組 - 的資料庫使用者,並使用 CREATE USER(Transact-SQL)。
如果您使用網狀架構訪問控制(工作區角色或項目許可權),則不需要建立資料庫使用者。 當您從 Fabric 入口網站管理 SQL 資料庫層級角色時,您不需要建立使用者 - 入口網站會在需要時自動建立使用者。
在以 Microsoft Entra 使用者身份連接時,建立資料庫使用者
當你以 Microsoft Entra 使用者身份連接到資料庫時,應該使用 CREATE USER,搭配 FROM EXTERNAL PROVIDER 子句來建立 Microsoft Entra 主體的使用者。
FROM EXTERNAL PROVIDER 會用 Microsoft Entra 驗證指定的主體名稱,取得主體識別碼(使用者或群組的物件 ID、應用程式 ID 或用戶端 ID),並將該識別碼存為使用者的安全識別碼(SID)於 SQL 元資料中。 使用 FROM EXTERNAL PROVIDER 子句時,您必須是 Microsoft Entra Directory Readers 角色 的成員。 以下範例 T-SQL 腳本使用 FROM EXTERNAL PROVIDER,根據 Microsoft Entra 使用者、Microsoft Entra 中的服務主體或 Microsoft Entra 中的群組建立使用者。
-- Create a user for a Microsoft Entra user
CREATE USER [alice@contoso.com] FROM EXTERNAL PROVIDER;
-- Create a user for a service principal in Microsoft Entra
CREATE USER [HRApp] FROM EXTERNAL PROVIDER;
-- Create a user for a group in Microsoft Entra
CREATE USER [HR] FROM EXTERNAL PROVIDER;
當以 Microsoft Entra 服務主體身份連接時,建立資料庫使用者
當應用程式連接到具有服務主體的資料庫時,必須發出包含
若指定的主體是 Microsoft Entra 中的使用者或群組,則 SID 必須是該使用者或群組在 Microsoft Entra 中的物件 ID。 若指定的主體是 Microsoft Entra 中的服務主體,則 SID 必須是該服務主體在 Microsoft Entra 中的應用程式 ID(用戶端 ID)。 從 Microsoft Entra 取得的物件 ID 與應用程式 ID(用戶端 ID)必須轉換為 binary(16)。
自變數的值 TYPE 必須是:
-
E- 若指定的 Microsoft Entra 主體是使用者或服務主體。 -
X- 若指定的 Microsoft Entra 主體為群組。
以下 T-SQL 範例腳本為Microsoft Entra使用者建立一個資料庫使用者,名為 bob@contoso.com,並將新使用者的 SID 設定為該Microsoft Entra使用者的物件 ID。 用戶物件的唯一識別碼經過轉換,然後串接成CREATE USER語句。 在Microsoft Entra中將使用者的物件 ID 替換為 <unique identifier sid>。
DECLARE @principal_name SYSNAME = 'bob@contoso.com';
DECLARE @objectId UNIQUEIDENTIFIER = '<unique identifier sid>'; -- user's object ID in Microsoft Entra
-- Convert the guid to the right type
DECLARE @castObjectId NVARCHAR(MAX) = CONVERT(VARCHAR(MAX), CONVERT (VARBINARY(16), @objectId), 1);
-- Construct command: CREATE USER [@principal_name] WITH SID = @castObjectId, TYPE = E;
DECLARE @cmd NVARCHAR(MAX) = N'CREATE USER [' + @principal_name + '] WITH SID = ' + @castObjectId + ', TYPE = E;'
EXEC (@cmd);
以下範例為Microsoft Entra服務主體建立一個資料庫使用者,名為 HRApp,並將新使用者的 SID 設定為 Microsoft Entra 中服務主體的客戶端 ID。
DECLARE @principal_name SYSNAME = 'HRApp';
DECLARE @clientId UNIQUEIDENTIFIER = '<unique identifier sid>'; -- principal's client ID in Microsoft Entra
-- Convert the guid to the right type
DECLARE @castClientId NVARCHAR(MAX) = CONVERT(VARCHAR(MAX), CONVERT (VARBINARY(16), @clientId), 1);
-- Construct command: CREATE USER [@principal_name] WITH SID = @castClientId, TYPE = E;
DECLARE @cmd NVARCHAR(MAX) = N'CREATE USER [' + @principal_name + '] WITH SID = ' + @castClientId + ', TYPE = E;'
EXEC (@cmd);
以下範例為Microsoft Entra群組建立一個資料庫使用者,名為 HR,並將新使用者的 SID 設定為該群組的物件 ID。
DECLARE @group_name SYSNAME = 'HR';
DECLARE @objectId UNIQUEIDENTIFIER = '<unique identifier sid>'; -- principal's object ID in Microsoft Entra
-- Convert the guid to the right type
DECLARE @castObjectId NVARCHAR(MAX) = CONVERT(VARCHAR(MAX), CONVERT (VARBINARY(16), @objectId), 1);
-- Construct command: CREATE USER [@groupName] WITH SID = @castObjectId, TYPE = X;
DECLARE @cmd NVARCHAR(MAX) = N'CREATE USER [' + @group_name + '] WITH SID = ' + @castObjectId + ', TYPE = X;'
EXEC (@cmd);
限制
- Microsoft Entra ID 是 Fabric 唯一支援的身份提供者 SQL 資料庫。 具體而言,不支援 SQL 驗證。
- 不支援登入(伺服器主體)。
- 目前,Microsoft Fabric 中唯一支援的 SQL 資料庫連線政策是 Default。 如需詳細資訊,請參閱 連線原則。