Azure Databricks应用通过服务主体连接SQL Warehouse异常排查
问题原因与解决方法
核心问题
你使用oauth_service_principal作为凭证提供者时,代码触发了需要用户交互的授权码流,而非预期的机器对机器(M2M)客户端凭证流,本质是参数配置不完整或错误,导致连接器未正确识别服务主体的M2M模式。
具体解决步骤
1. 补全代码必填参数
服务主体M2M流需要同时指定token_endpoint参数,缺少该参数会导致连接器 fallback 到需要用户交互的授权码流。
错误示例(缺少token_endpoint):
from databricks.sql import connect conn = connect( server_hostname='<你的Databricks工作区域名>', http_path='<SQL Warehouse的HTTP路径>', auth_type='oauth_service_principal', client_id='<服务主体ID>', client_secret='<服务主体密钥>' )
正确示例(补充Azure AD令牌端点):
from databricks.sql import connect conn = connect( server_hostname='<你的Databricks工作区域名>', http_path='<SQL Warehouse的HTTP路径>', auth_type='oauth_service_principal', client_id='<服务主体ID>', client_secret='<服务主体密钥>', token_endpoint='https://login.microsoftonline.com/<你的Azure租户ID>/oauth2/v2.0/token' )
2. 验证服务主体配置
除了SQL Warehouse的“Can use”权限,还需确认:
- 服务主体已被添加到Databricks工作区,并分配了基础工作区权限(如“用户”角色)
- 服务主体的密钥未过期、未被吊销
3. 升级连接器版本
旧版本的databricks-sql-connector可能对服务主体M2M流支持不完善,执行以下命令升级:
pip install --upgrade databricks-sql-connector
为什么PAT能正常工作?
PAT是直接的身份凭证,无需经过OAuth流程验证,连接器可直接用它完成身份校验,因此不会触发需要用户交互的授权流程。
内容的提问来源于stack exchange,提问作者flow_me_over
相关产品推荐
相关产品推荐

