在Synapse中用Spark链接服务连接本地数据库遇密钥获取错误求助
Spark调用mssparkutils获取密钥报错的解决方案
问题描述
我按照Azure Synapse的Spark SQL连接器文档连接本地数据库,代码如下:
servername = "XXXXX" dbname = "poplesdb" url = servername + ";" + "databaseName=" + dbname + ";" dbtable = "Test" user = "test\user" password = mssparkutils.credentials.getSecret('xxxx','xxxxxxx')
执行后触发错误:
Py4JJavaError: An error occurred while calling z:mssparkutils.credentials.getSecret. : com.twitter.finagle.NoBrokersAvailableException: No hosts are available for XXXX.vault.azure.net:443, Dtab.base=[], Dtab.local=[]. Remote Info: Not Available
尝试多日未解决,需要连接retail数据库内的数据源,链接服务配置截图如下:

排查与解决步骤
- 检查密钥库网络连通性:错误提示无法连接Azure Key Vault的443端口,需确认Synapse工作区所在虚拟网络是否允许访问该密钥库。若用专用端点,要确保端点配置正确、路由无阻塞;若为公网访问,需检查密钥库防火墙规则是否放行Synapse工作区IP段。
- 验证链接服务名称:从截图看链接服务已关联密钥库,需确认代码中
getSecret第一个参数(密钥库链接服务名)与实际链接服务名称完全一致,注意大小写和拼写。 - 确认密钥名称准确性:代码中
getSecret第二个参数是密钥名称,要确保该密钥存在于目标密钥库中,且名称完全匹配(含大小写)。 - 检查Synapse权限:确保Synapse工作区的服务主体/托管身份拥有密钥库的
getSecret权限,可在密钥库访问策略中添加对应身份的权限。 - 测试基础连通性:在Synapse笔记本中用极简代码测试密钥库访问,比如:
mssparkutils.credentials.getSecret('你的链接服务名','你的密钥名')
逐步缩小问题范围。
内容的提问来源于stack exchange,提问作者jacky789
相关产品推荐
相关产品推荐

