Serverless Synapse Analytics外部登录异常:存在但不可见无法操作
Serverless Synapse Analytics AAD安全组外部登录异常问题排查与解决
问题现象
在Serverless Synapse Analytics实例的master数据库中执行CREATE LOGIN [sg-aad-name] FROM EXTERNAL PROVIDER;创建AAD安全组外部登录后,出现以下矛盾现象:
- 登录未出现在
sys.server_principals表中,执行SELECT SUSER_SID('sg-aad-name')无结果返回 - 尝试
ALTER、DROP该登录时,提示“它不存在或您没有权限” - 再次执行创建语句时,提示登录已存在
- 尝试将其添加到服务器角色时,同样出现权限/不存在提示
- 操作账号拥有SQL管理员权限,目标AAD安全组也具备对应权限,该问题出现在两个实例中,但另一个实例可正常工作
排查与解决步骤
1. 确认AAD安全组的名称准确性
确保使用的AAD安全组名称与Azure AD中组的**显示名称或用户主体名称(UPN)**完全一致,注意避免大小写、空格或特殊字符的输入错误。如果组名称包含特殊字符,需用方括号[]完整包裹,例如[sg-aad-name@contoso.com]。
2. 手动刷新AAD对象同步
Serverless Synapse与Azure AD的对象同步可能存在延迟,导致创建的登录未及时同步到sys.server_principals表。以AAD管理员身份在master数据库中执行以下命令手动刷新:
EXEC sp_refresh_azure_ad_objects;
执行完成后,再次查询sys.server_principals或SUSER_SID('sg-aad-name')验证是否可见。
3. 验证操作权限的类型
创建AAD外部登录必须使用Azure AD管理员身份执行,SQL本地管理员不具备创建AAD登录的权限。即使你拥有SQL管理员权限,若不是AAD管理员,可能会出现创建时的异常状态。确认当前操作账号是否为Synapse工作区配置的Azure AD管理员:
- 登录Azure门户,进入目标Synapse工作区
- 在左侧导航栏选择“SQL管理员”,检查“AAD管理员”是否为当前操作账号或所属的AAD组
4. 通过PowerShell清理残留登录记录
若存在同步异常导致的“幽灵登录”,可通过PowerShell命令查看并清理:
- 安装并登录Azure PowerShell模块:
Install-Module -Name Az.Synapse -Force Connect-AzAccount - 检查目标登录是否存在:
Get-AzSynapseSqlLogin -WorkspaceName <你的Synapse工作区名称> -Name sg-aad-name - 若存在则删除:
Remove-AzSynapseSqlLogin -WorkspaceName <你的Synapse工作区名称> -Name sg-aad-name - 重新执行
CREATE LOGIN [sg-aad-name] FROM EXTERNAL PROVIDER;语句
5. 检查Synapse实例的AAD关联配置
确认异常实例与正常实例的Azure AD关联配置一致:
- 检查Synapse工作区是否与目标AAD组属于同一个Azure AD租户
- 确认工作区的“AAD管理员”配置未被修改或失效
内容的提问来源于stack exchange,提问作者Drop17
相关产品推荐
相关产品推荐

