You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用DBATools连接Azure Synapse无服务器池并解决数据复制报错

解决DBATools Copy-DbaDbTableData连接Azure Synapse无服务器池的认证问题

问题原因

报错提示"Windows logins are not supported"是因为Copy-DbaDbTableData默认使用本地集成认证(Windows登录),但Azure Synapse无服务器池不支持Windows登录,必须使用Azure Active Directory (AAD) 认证方式——这和你在SSMS/ADS中使用的"AAD通用MFA"是同一认证体系。

解决步骤

你已经通过Invoke-Sqlcmd结合AAD访问令牌成功连接Synapse,只需让DBATools复用同样的认证逻辑:

  1. 获取AAD访问令牌(和原脚本一致):
Connect-AzAccount -TenantId [你的租户GUID] -Subscription [你的订阅GUID]
$accessToken = (Get-AzAccessToken -ResourceUrl https://database.windows.net).Token
  1. 创建带AccessToken的Synapse连接对象:
    手动指定认证方式,避免DBATools自动使用本地集成认证:
$sourceConnParams = @{
    SqlInstance = "你的Synapse无服务器池名称.sql.azuresynapse.net"
    Database = "目标数据库名称"
    AccessToken = $accessToken
}
$synapseConn = Connect-DbaInstance @sourceConnParams
  1. 使用连接对象执行数据复制:
    将创建好的连接实例作为-Source参数传入Copy-DbaDbTableData:
Copy-DbaDbTableData -Source $synapseConn `
                    -Destination "你的本地SQL实例名称" `
                    -Database "本地目标数据库" `
                    -Table "要复制的表名"

额外注意事项

  • 确保本地SQL实例的认证方式允许你连接(比如Windows集成或SQL登录,根据本地环境配置)
  • 检查Synapse无服务器池的防火墙规则,确认你的本地IP已被允许访问
  • 升级DBATools到最新版本,旧版本可能对AAD AccessToken支持存在bug
  • 若需复制多个表,可通过-Table参数传入逗号分隔的表名,或用Get-DbaDbTable获取表对象后通过-InputObject传递

内容的提问来源于stack exchange,提问作者Autumnal Sigh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 00:02:18