Applies to:✅SQL 数据库 Microsoft Fabric
本文介绍 SQL 数据库的身份验证。
与其他Microsoft Fabric项类型一样,SQL 数据库依赖于 Microsoft Entra 身份验证。
要成功对 SQL 数据库进行身份验证,Microsoft Entra 用户、服务主体 或其 组 必须在 Fabric 中拥有对数据库的读取项权限。 有关如何授予对 Fabric 工作区或特定数据库的Microsoft Entra标识访问权限的信息,请参阅 Fabric 访问控制。
若要查找在 Microsoft 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 扩展。
- 使用支持Microsoft Entra身份验证的 SQL 客户端驱动程序的应用程序,包括 SqlClient、JDBC、ODBC 和 OLE DB。
应用程序和工具必须将驱动程序升级到支持Microsoft Entra身份验证的版本,并在其 SQL connection string 中添加身份验证模式关键字,例如 ActiveDirectoryInteractive、ActiveDirectoryServicePrincipal 或 ActiveDirectoryPassword。
为 Microsoft Entra 标识创建数据库用户
如果计划使用Transact-SQL配置 SQL 访问控制,首先,需要使用CREATE USER(Transact-SQL)创建与 Microsoft Entra 标识(用户、服务主体或其组)对应的数据库用户。
如果使用 Fabric 访问控制(工作区角色或项目权限),则无需创建数据库用户。 通过 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 中的服务主体或组创建用户。
-- 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 服务主体身份连接时创建数据库用户
当应用程序使用服务主体连接到数据库时,应用程序必须发出 CREATE USER,使用 SID 和 TYPE 子句为 Microsoft Entra 主体创建用户。 指定的主体名称未在Microsoft Entra中验证。 应用程序(应用程序开发人员)应负责提供有效的名称、有效的 SID 和用户对象类型。
如果指定的主体是Microsoft Entra中的用户或组,则 SID 必须是Microsoft Entra中该用户或组的对象 ID。 如果指定的主体是Microsoft Entra中的服务主体,则 SID 必须是Microsoft Entra中服务主体的应用程序 ID(客户端 ID)。 从Microsoft Entra获取的对象 ID 和应用程序 ID 必须转换为 binary(16)。
TYPE 参数的值必须是:
-
E- 如果指定的Microsoft Entra主体是用户或服务主体。 -
X- 如果指定的 Microsoft Entra 主体是一个组。
以下 T-SQL 示例脚本为名为 bob@contoso.com 的 Microsoft Entra 用户创建数据库用户,并将新用户的 SID 设置为Microsoft Entra用户的对象 ID。 用户对象 ID 的唯一标识符将会转换,然后连接到 CREATE USER 语句中。 将 <unique identifier sid> 替换为Microsoft Entra中的用户对象 ID。
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);
以下示例为名为 HRApp 的 Microsoft Entra 服务主体创建数据库用户,并将新用户的 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);
以下示例为名为 HR 的 Microsoft Entra 组创建数据库用户,并将新用户的 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。 有关详细信息,请参阅 连接策略。