从Azure Databricks标准层连接私有终结点Azure SQL数据库失败求助
问题分析与解决步骤
核心问题:Databricks直接通过JDBC连接私有端点部署的Azure SQL时,请求走了公共网络,被SQL的"拒绝公共访问"策略拦截;而ADF通过托管IR能成功,是因为托管IR处于可访问私有端点的网络环境中。
以下是针对性的排查和解决步骤:
1. 确认Databricks的网络部署模式
- 只有**虚拟网络注入(VNet Injection)**模式下的Databricks集群,才能直接访问VNet内的私有端点资源。如果你的Databricks是默认托管网络,集群不在自定义VNet中,无法直接连通私有端点,需要切换到VNet注入模式。
- 若已使用VNet注入,确认集群所在子网与Azure SQL私有端点所在VNet是否连通(同VNet或已配置VNet对等互联)。
2. 验证私有端点的DNS解析正确性
登录Databricks集群的驱动节点,执行以下命令检查DNS解析结果:
nslookup <你的SQL服务器名称>.database.windows.net
- 若返回的是公共IP,说明DNS配置异常:
- 需在SQL私有端点所在VNet中创建并关联专用DNS区域
privatelink.database.windows.net,确保该区域能将SQL服务器FQDN解析为私有端点的内网IP。 - 确保Databricks集群所在子网使用的DNS服务器(Azure默认DNS或自定义DNS)能正确解析该专用区域的记录。
- 需在SQL私有端点所在VNet中创建并关联专用DNS区域
3. 检查JDBC连接字符串配置
确保JDBC串使用SQL服务器的完整FQDN,不要手动指定IP或强制公共网络连接,示例正确连接串:
jdbc_url = "jdbc:sqlserver://<server-name>.database.windows.net:1433;databaseName=<db-name>;encrypt=true;trustServerCertificate=false;hostNameInCertificate=*.database.windows.net;loginTimeout=30;"
- 若之前配置过Azure SQL的服务终结点,建议禁用,避免与私有端点的网络规则冲突。
4. 排查网络安全组(NSG)与路由表
- 检查SQL私有端点所在子网的NSG,是否允许来自Databricks集群子网的1433端口入站流量(若使用SQL的非默认端口,需对应调整)。
- 检查Databricks集群子网的路由表,确认没有将前往SQL服务器的流量转发到公共网络(比如默认路由是否指向VNet内部,而非公共互联网网关)。
5. 补充:ADF托管IR的成功逻辑参考
ADF托管IR若部署在与SQL私有端点同VNet的托管虚拟网络中,天然具备私有端点的访问权限;而Databricks直接连接时,必须确保自身集群处于可访问私有端点的网络环境中,这是两者的核心差异。
内容的提问来源于stack exchange,提问作者Dalvi
相关产品推荐
相关产品推荐

