Navicat连接Azure SQL Database失败,90%因未开启“允许Azure服务访问”、未配置防火墙白名单及选错身份验证方式;必须开启该开关、使用SQL Server身份验证、填写正确用户名密码、设置Encrypt=yes和TrustServerCertificate=no、端口用1433、服务器名用FQDN格式。
navicat 连接 azure sql database 失败,90% 是因为没开「允许 azure 服务访问」+ 没配防火墙白名单 + 身份验证方式选错。azure sql 默认拒绝所有外部连接,不手动放行就永远连不上。
Azure 控制台必须开启「允许 Azure 服务和资源访问此服务器」
这个开关藏在 Azure 门户 → SQL Server → 「防火墙和虚拟网络」→ 底部「允许 Azure 服务和资源访问此服务器」。它不是可选项,是必开项——哪怕你用的是本地 Navicat,Azure 的底层代理机制也需要它放行流量。关着的时候,Cannot open server 'xxx' requested by the login 这类报错会反复出现,且日志里查不到具体 IP 拒绝记录。
- 别只填客户端公网 IP 就以为够了:Azure SQL 的连接路径会经过多个中间节点,纯 IP 白名单无法覆盖全部链路
- 该开关开启后仍连不上?说明问题出在下一步的客户端配置或凭据上,不是网络层卡死
Navicat 连接时必须用「SQL Server 身份验证」,不能选 Windows 身份验证
Azure SQL Database 不支持 Windows 身份验证(AD 集成需额外配置 Azure AD 管理员和 OAuth 流程),Navicat 里如果选了 Windows Authentication,会直接报 Login failed for user '' 或空用户名错误。必须明确选择 SQL Server Authentication,并填写你在 Azure Portal 中创建的 SQL 登录名(格式为 username,不是 username@server)。
- 用户名字段只填登录名本身,例如
myadmin;填myadmin@myserver会被解析成数据库用户myadmin@myserver,不存在,必然失败 - 密码要和 Azure Portal 中「SQL Server 管理员凭据」完全一致,大小写敏感,且不能含不可见字符(比如复制粘贴时带了全角空格)
- 「默认数据库」建议显式填
master或目标数据库名;留空可能触发Cannot open database类错误
连接字符串里必须加 Encrypt=yes 和 TrustServerCertificate=no
Azure SQL 强制要求 TLS 加密,但 Navicat 默认不启用加密协商,也不校验证书。不加这两个参数,连接会卡在「Testing connection…」几秒后超时,或者报 SSL Provider: The certificate chain was issued by an authority that is not trusted。
- 在 Navicat 新建连接 → 「高级」选项卡 → 勾选「Use SSL」→ 在「SSL Mode」下拉中选
require(等效于Encrypt=yes) - 同时必须在「连接」→ 「高级」→ 「Connection String」里手动追加
TrustServerCertificate=no;否则 Navicat 可能跳过证书校验,Azure 会拒绝连接 - 端口必须用
1433,不能省略;Azure SQL 不接受自定义端口
检查是否误用了「服务器名称」格式
Azure SQL 的服务器名称不是 IP,也不是带端口的完整地址,而是形如 myserver.database.windows.net 的 FQDN。填错格式会导致 DNS 解析失败或连接被重定向到错误实例。
- 不要填
myserver(缺域名)、myserver.cloudapp.azure.com(旧格式)、tcp:myserver.database.windows.net,1433(Navicat 会自动拼接协议和端口,加了反而出错) - 确认没有多余空格:复制粘贴时容易带首尾空格,Navicat 不提示,但连接时会静默失败
- 若使用私有链接(Private Link),则必须走 VNet 内网 DNS 解析,本地 Navicat 无法直连——这种情况只能通过跳板机或 Azure Cloud Shell 中转
最常被忽略的是「允许 Azure 服务访问」开关和 TrustServerCertificate=no 的组合。前者不开,连请求都发不到实例;后者不设,TLS 握手在客户端就被 Navicat 自己拦下来,根本到不了 Azure 侧的日志里。


















