你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
本文将向您展示如何使用 Microsoft Entra ID 进行身份验证 Azure Synapse Analytics。
注意
Microsoft Entra server principals 目前在 Azure Synapse Analytics 中为预览版。
Prerequisites
要在 Azure Synapse Analytics 中使用 Microsoft Entra 认证,你需要以下先决条件:
- Microsoft Entra 租户已添加用户和组。
- 一个现有的 Azure Synapse 工作空间或独立专用 SQL 池。
创建并填充 Microsoft Entra 租户
在配置 Microsoft Entra 认证用于 Azure Synapse Analytics 之前,你需要创建一个 Microsoft Entra 租户,并向其中添加用户和组。 你可以完全在 Azure 内管理 Microsoft Entra 租户,或者将它们用于与本地 Active Directory 域 Service 进行联合。
有关详细信息,请参见:
- 什么是 Microsoft Entra ID?
- 将您的本地身份与 Microsoft Entra ID 集成
- 在 Microsoft Entra ID 中添加自己的域名
- 什么是与 Microsoft Entra ID 的联合身份验证?
- 与 Microsoft Entra ID 进行目录同步
- 使用 Windows PowerShell 管理 Microsoft Entra ID
- 混合标识所需的端口和协议
设置 Microsoft Entra 管理员
要使用 Microsoft Entra 认证,您的 Azure Synapse 资源需要一个 Microsoft Entra 管理员。
创建资源时,你也可以配置 Microsoft Entra 管理员。 如果你已经设置了管理员,请跳过这一部分。
Azure Synapse工作区
对于 Azure Synapse 工作空间,在工作空间上配置 Microsoft Entra 管理员。 更多信息请参见 管理员架构。
独立专用SQL池
当你设置 Microsoft Entra 管理员时,你会为托管独立专用 SQL 池的逻辑服务器启用 Microsoft Entra 认证。 你可以通过Azure门户、PowerShell、Azure CLI或REST API设置管理员。
在 Azure 门户中,可以找到 logical server 名称
- 在 Azure Synapse Analytics 中独立专用 SQL 池“概述”页面上的“服务器名称”字段中。
- Azure 门户
- PowerShell
- Azure CLI
- REST API
要在 Azure 门户中为逻辑服务器设置 Microsoft Entra 管理员,请执行以下步骤:
在 Azure 门户的 Directories + subscriptions 窗格中,选择包含你的 Azure Synapse 资源的目录作为当前目录。
搜索 SQL服务器 ,然后选择专用SQL池的逻辑服务器,打开 SQL服务器 窗格。
在逻辑服务器的SQL 服务器窗格中,在Settings下选择Microsoft Entra ID,打开Microsoft Entra ID窗格。
在 Microsoft Entra ID 窗格中,选择 Set admin打开 Microsoft Entra ID 窗格。
Microsoft Entra ID 窗格显示当前目录中的所有用户、组和应用程序,并允许按名称、别名或 ID 进行搜索。 找到您想要的 Microsoft Entra 管理员身份并选择,然后选择 Select 以关闭窗格。
在您的逻辑服务器的 Microsoft Entra ID 页面顶部,选择 保存。
对于 Microsoft Entra 用户和组,“对象 ID”显示在管理员名称旁。 对于应用程序(服务主体),将显示应用程序 ID。
更改管理员的过程可能需要几分钟时间。 然后,新管理员将显示在 Microsoft Entra admin 字段中。
若要删除管理员,请在 Microsoft Entra ID 页面顶部选择 Remove admin,然后选择 Save。 将 Microsoft Entra 管理员删除会导致您的逻辑服务器禁用 Microsoft Entra 身份验证。
注意
Microsoft Entra 管理员以用户(数据库主体)的形式存储在服务器的 master 数据库中。 由于数据库主体名称必须唯一,因此管理员的显示名称不能与服务器 master 数据库中任何用户的名称相同。 如果已存在具有该名称的用户,则 Microsoft Entra 管理员设置过程会失败并回滚,表明该名称已被占用。
分配 Microsoft Graph 权限
对于某些操作,Azure Synapse Analytics 需要具有查询 Microsoft Graph 的权限,详见 Microsoft Graph 权限。 Azure Synapse Analytics 支持对资源标识的细粒度 Microsoft 图形 API 权限,如 User.Read.All、GroupMember.Read.All 和 Application.Read.All。 此方法遵循最低特权原则,建议使用此方法。 你也可以将目录读取者角色用作更广泛的替代方案。 欲了解更多,请参见 Microsoft Entra for Azure Synapse Analytics 的 Managed identities。
目录查看者角色
有关指导流程,请参见“将目录阅读器角色分配给 Microsoft Entra 组”。
以下 PowerShell 脚本会将 Azure Synapse 资源标识添加到 Directory Readers 角色中。
# This script grants "Directory Readers" permission to an Azure Synapse service principal.
# It can be executed only by a user who is a member of the **Privileged Roles Administrator** role.
Import-Module Microsoft.Graph.Authentication
$instanceName = "<InstanceName>" # Enter the name of your managed instance or server
$tenantId = "<TenantId>" # Enter your tenant ID
Connect-MgGraph -TenantId $tenantId -Scopes "RoleManagement.ReadWrite.Directory"
# Get Microsoft Entra "Directory Readers" role and create if it doesn't exist
$roleName = "Directory Readers"
$role = Get-MgDirectoryRole -Filter "DisplayName eq '$roleName'"
if ($role -eq $null) {
# Instantiate an instance of the role template
$roleTemplate = Get-MgDirectoryRoleTemplate -Filter "DisplayName eq '$roleName'"
New-MgDirectoryRoleTemplate -RoleTemplateId $roleTemplate.Id
$role = Get-MgDirectoryRole -Filter "DisplayName eq '$roleName'"
}
# Get service principal for your logical server
$roleMember = Get-MgServicePrincipal -Filter "DisplayName eq '$instanceName'"
$roleMember.Count
if ($roleMember -eq $null) {
Write-Output "Error: No service principal with name '$($instanceName)' found, make sure that instanceName parameter was entered correctly."
exit
}
if (-not ($roleMember.Count -eq 1)) {
Write-Output "Error: Multiple service principals with name '$($instanceName)'"
Write-Output $roleMember | Format-List DisplayName, Id, AppId
exit
}
# Check if service principal is already member of Directory Readers role
$isDirReader = Get-MgDirectoryRoleMember -DirectoryRoleId $role.Id -Filter "Id eq '$($roleMember.Id)'"
if ($isDirReader -eq $null) {
# Add principal to Directory Readers role
Write-Output "Adding service principal '$($instanceName)' to 'Directory Readers' role..."
$body = @{
"@odata.id"= "https://graph.microsoft.com/v1.0/directoryObjects/{$($roleMember.Id)}"
}
New-MgDirectoryRoleMemberByRef -DirectoryRoleId $role.Id -BodyParameter $body
Write-Output "'$($instanceName)' service principal added to 'Directory Readers' role."
} else {
Write-Output "Service principal '$($instanceName)' is already member of 'Directory Readers' role."
}
Microsoft Entra 管理员现在可以创建 Microsoft Entra 服务器主体(登录名)和数据库主体(用户)。
在 SQL 中创建 Microsoft Entra 主体对象
要通过 Microsoft Entra 认证连接到 Azure Synapse Analytics 中的数据库,你需要在数据库中为该身份配置主体,并且至少具有 CONNECT 权限。
数据库用户权限
当你创建数据库用户时,它默认拥有数据库的 CONNECT 权限。 数据库用户还会在两种情况下继承权限:
- 用户是Microsoft Entra组的成员,该组也被分配了服务器权限。
- 你从登录创建用户,用户继承该登录名在服务器级别被授予且适用于该数据库的权限。
无论主体类型如何(Microsoft Entra ID、SQL 身份验证等),服务器和数据库主体的管理权限都相同。 授予数据库角色权限,而不是直接授予用户权限。 然后用相应权限将用户添加到角色中。 这种方法简化了长期权限管理,并降低了身份在不再适合时保留访问权限的可能性。
有关详细信息,请参见:
受限的数据库用户
封闭数据库用户是一种未与 master 数据库中的登录名相关联的 SQL 用户。 要创建 Microsoft Entra 包含的数据库用户,必须使用具有至少 ALTER ANY USER 权限的 Microsoft Entra 标识连接到数据库。 以下 T-SQL 示例创建了一个来自 Microsoft Entra ID 的、名为Microsoft_Entra_principal_name的数据库主体。
CREATE USER [<Microsoft_Entra_principal_name>] FROM EXTERNAL PROVIDER;
要为 Microsoft Entra 组创建一个独立数据库用户,请输入该组的显示名称:
CREATE USER [ICU Nurses] FROM EXTERNAL PROVIDER;
要为托管标识或服务主体创建包含的数据库用户,请输入该标识的显示名称:
CREATE USER [appName] FROM EXTERNAL PROVIDER;
若要为 Microsoft Entra 用户创建受限的数据库用户,请输入标识的用户主体名称:
CREATE USER [adrian@contoso.com] FROM EXTERNAL PROVIDER;
基于登录名的用户
注意
Microsoft Entra 服务器主体 (logins) 目前正处于 Azure Synapse Analytics 预览阶段。
Microsoft Entra 服务器主体(或登录名) 得到支持,这意味着不需要独立数据库用户。 数据库主体(用户)可以基于服务器主体创建,这意味着 Microsoft Entra 用户可以继承登录名的服务器级分配权限。
CREATE USER [appName] FROM LOGIN [appName];
有关创建 Microsoft Entra 服务器主体(登录名)的语法,请参阅 CREATE LOGIN。
外部用户
不能直接为在与您的 Azure 订阅关联的 Microsoft Entra 租户之外的其他租户中管理的标识创建数据库用户。 不过,你可以将其他目录中的用户导入关联目录,作为外部用户。 然后你可以用它们创建包含的数据库用户,这些用户可以访问数据库。 外部用户还可以通过 Microsoft Entra 组中的成员身份获得访问权限。
示例: 要创建一个代表 Microsoft Entra 联合域或托管域用户的受限数据库用户:
CREATE USER [alice@fabrikam.com] FROM EXTERNAL PROVIDER;
- 作为外部用户导入到托管域中的联邦域用户账户必须使用托管域身份。
名称考虑事项
你不能在用于 T-SQL 和 语句的用户名中使用冒号 或和号 等特殊字符。
Microsoft Entra ID 和 Azure Synapse Analytics 在用户管理设计上有一个关键区别:Microsoft Entra ID 允许租户内重复的显示名称,而 Azure Synapse Analytics 则要求专用 SQL 池中的服务器主体名必须唯一,并且数据库中的数据库主体名也必须唯一。
Microsoft Graph 权限
该CREATE USER ... FROM EXTERNAL PROVIDER命令要求 Azure Synapse Analytics 代表登录用户访问 Microsoft Entra ID(外部提供程序)。 有时,Microsoft Entra ID 会返回异常。
- 你可能会遇到 SQL 错误 33134,其中包含 Microsoft Entra ID 特定的错误消息。 错误通常会指出访问被拒绝、用户必须注册 MFA 才能访问资源,或者在第一方应用程序之间进行的访问必须通过预授权进行处理。 如果是前面的两种情况,则问题通常是由在用户的 Microsoft Entra 租户中设置的条件访问策略引起的:这些策略阻止用户访问外部提供程序。 更新条件访问策略,允许访问应用程序 ID 为
00000003-0000-0000-c000-000000000000的应用程序(Microsoft 图形 API 的应用 ID),应能解决问题。 如果错误指出在第一方应用程序之间进行的访问必须通过预授权进行处理,则出现问题是因为用户以服务主体的身份登录。 如果命令改由用户执行,它应该会成功。 - 如果收到 Connection Timeout Expired 消息,则可能需要将连接字符串的
TransparentNetworkIPResolution参数设置为 false。 有关详细信息,请参阅 .NET Framework 4.6.1 的连接超时问题 - TransparentNetworkIPResolution。
有关如何基于 Microsoft Entra 身份创建容纳的数据库用户的详细信息,请参阅 CREATE USER。
配置多重身份验证
为了提高安全性,建议配置 多因素认证(MFA),该多因素认证会提示用户使用第二种方式来向数据库进行认证,比如电话或身份验证器应用。
要在 Azure Synapse Analytics 中使用多因素认证,首先启用多因素认证,然后使用条件访问策略强制执行多重身份验证。
使用 Microsoft Entra 进行连接
在配置好 Microsoft Entra 认证后,你可以用它通过 SQL Server Management Studio 或 SQL Server Data Tools 连接 Azure Synapse Analytics,并配置客户端应用程序通过 Microsoft Entra 身份连接。
Microsoft Entra 身份验证故障排除
如需指导,请参见“与 Microsoft Entra 认证相关的故障排除”。