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

通过PowerShell连接Azure SQL DB提示现有连接被远程主机关闭如何解决?

PowerShell连接Azure SQL DB报错排查方案

核心报错根因定位方向

该报错说明TCP网络连通性正常,故障出在登录认证阶段被服务端主动断开连接,结合你已完成的排查项,按以下优先级逐一验证:

1. 验证Azure AD访问令牌有效性

这是该场景下最高发的问题:

  • 首先确认令牌不为空:执行命令 echo $env:ACCESSTOKEN 查看是否有输出
  • 校验令牌属性:将令牌内容粘贴到JWT解析工具,确认两个核心属性
    • aud(受众)必须为 https://database.windows.net/,如果是其他资源(如Graph、Azure管理接口)的令牌会被Azure SQL直接拒绝
    • exp(过期时间)必须晚于当前时间,过期令牌会触发连接断开
  • 确认令牌对应身份的SQL权限:SSMS连接使用的身份和令牌身份可能不一致,需确认令牌对应的AAD用户/服务主体已被添加为Azure SQL服务器的AAD管理员,或已在目标库中创建了对应的包含用户并授予连接权限

2. 替换SqlClient驱动组件

旧版本的System.Data.SqlClient存在Azure AD令牌认证、TLS 1.2握手的兼容性bug,按以下步骤替换为官方推荐的Microsoft.Data.SqlClient测试:

  1. 安装驱动包:执行PowerShell命令 Install-Package Microsoft.Data.SqlClient
  2. 修改你的连接代码,仅替换实例化语句即可,其余逻辑不变:
# 仅修改这一行,其余配置保持和原代码一致
$conn = new-object Microsoft.Data.SqlClient.SqlConnection

重新执行代码验证连接是否正常。

3. 验证PowerShell会话网络配置

SSMS会默认继承系统代理配置,而PowerShell会话的.NET网络配置可能和系统不一致:

  • 执行命令查看当前会话代理配置:[System.Net.WebRequest]::DefaultWebProxy
  • 如果存在代理配置,可临时关闭本地代理后重试连接,或配置SqlClient走系统代理

4. 使用官方内置命令交叉验证

使用Azure PowerShell的原生Invoke-SqlCmd命令测试连接,排除自定义代码问题:

Invoke-SqlCmd -ServerInstance $sqlServer -Database $sqlDB -AccessToken $env:ACCESSTOKEN -Query "SELECT @@VERSION"
  • 若命令执行成功:说明你的自定义SqlClient代码存在问题,优先按第二步替换驱动解决
  • 若命令执行失败:说明问题出在令牌或权限配置,回到第一步重新校验

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 01:36:02