Microsoft Fabric 中 SQL 数据库的身份验证
适用于:✅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 身份验证连接到 SQL 数据库:
- 支持 Microsoft Entra 身份验证的 SQL 工具,包括 SQL Server Management Studio 和 带有 Visual Studio Code 的 mssql 扩展。
- 使用支持 Microsoft Entra 身份验证的 SQL 客户端驱动程序的应用程序,包括 SqlClient、JDBC、ODBC 和 OLE DB。
应用程序和工具必须将驱动程序升级到支持 Microsoft Entra 身份验证的版本,并在其 SQL 连接字符串中添加身份验证模式关键字,如 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),并将标识符存储为 SQL 元数据中的用户安全标识符 (SID)。 使用 FROM EXTERNAL PROVIDER
子句时,你必须是 Microsoft Entra 中目录读者角色的成员。 以下示例 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 服务主体身份建立连接时创建数据库用户
当应用程序通过服务主体连接到数据库时,应用程序必须发出带有 SID 和 TYPE 子句的 CREATE USER
来创建 Microsoft Entra 主体的用户。 指定的服务主体未在 Microsoft Entra 中验证。 应用程序(应用程序开发人员)应负责提供有效的名称、有效的 SID 和用户对象类型。
如果指定的主体是 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 示例脚本为名为 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 [' + @principal_name + '] WITH SID = ' + @castObjectId + ', TYPE = X;'
EXEC (@cmd);
限制
- Microsoft Entra ID 是 Fabric 支持的唯一标识提供者 SQL 数据库。 具体而言,不支持 SQL 身份验证。
- 不支持登录名(服务器主体)。