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

能否使用现有Service Principal的OAuth令牌在Azure Databricks中连接Snowflake

服务主体连接Snowflake报错Invalid OAuth access token解决方案

方案可行性确认

使用现有Azure Service Principal(服务主体)对接Snowflake的方案完全可行,不需要额外新建服务主体,只需在Snowflake侧完成对应权限配置即可解决报错问题。

具体操作步骤

前置要求

操作前需持有Snowflake账户的ACCOUNTADMIN角色权限,同时提前获取以下信息:

  • Azure租户ID
  • 现有服务主体的客户端ID(Client ID)
  • Snowflake的账户标识、要分配的仓库、数据库、Schema资源信息

操作流程

  • 创建Azure AD OAuth安全集成(如果已有对应集成可跳过该步骤),执行SQL语句:
CREATE OR REPLACE SECURITY INTEGRATION AZURE_AD_OAUTH_INTEGRATION
  TYPE = EXTERNAL_OAUTH
  ENABLED = TRUE
  EXTERNAL_OAUTH_TYPE = AZURE
  EXTERNAL_OAUTH_ISSUER = 'https://sts.windows.net/<替换为你的Azure租户ID>/'
  EXTERNAL_OAUTH_AUDIENCE_LIST = ('https://<替换为你的Snowflake账户标识>.snowflakecomputing.com')
  EXTERNAL_OAUTH_TOKEN_USER_MAPPING_CLAIM = 'oid'
  EXTERNAL_OAUTH_SNOWFLAKE_USER_MAPPING_ATTRIBUTE = 'LOGIN_NAME';
  • 在Snowflake中创建对应用户,绑定现有Azure服务主体:
CREATE OR REPLACE USER <替换为自定义的Snowflake用户名>
  LOGIN_NAME = '<替换为现有Azure服务主体的客户端ID>'
  DEFAULT_ROLE = <替换为要分配给该用户的角色,例如PUBLIC>;
  • 为该用户分配所需的资源访问权限:
-- 绑定角色到用户
GRANT ROLE <替换为分配的角色名> TO USER <替换为刚才创建的Snowflake用户名>;
-- 授予仓库访问权限
GRANT USAGE ON WAREHOUSE <替换为你的Snowflake仓库名> TO ROLE <替换为分配的角色名>;
-- 授予数据库、Schema访问权限
GRANT USAGE ON DATABASE <替换为你的数据库名> TO ROLE <替换为分配的角色名>;
GRANT USAGE ON SCHEMA <替换为你的Schema名> TO ROLE <替换为分配的角色名>;
-- 按需授予表/视图查询等操作权限
GRANT SELECT ON ALL TABLES IN SCHEMA <替换为你的Schema名> TO ROLE <替换为分配的角色名>;

连接验证

回到Databricks侧,确认生成访问令牌时的Scope配置为https://<替换为你的Snowflake账户标识>.snowflakecomputing.com/.default,再运行以下测试代码验证连接:

snowflake_conn_params = {
  "sfUrl": "<替换为你的Snowflake账户标识>.snowflakecomputing.com",
  "sfUser": "<替换为刚才创建的Snowflake用户名>",
  "sfAuthenticator": "oauth",
  "sfToken": "<替换为生成的Azure访问令牌>",
  "sfDatabase": "<替换为你的数据库名>",
  "sfSchema": "<替换为你的Schema名>",
  "sfWarehouse": "<替换为你的仓库名>"
}

# 执行测试查询
test_df = spark.read.format("snowflake").options(**snowflake_conn_params).option("query", "SELECT CURRENT_VERSION()").load()
test_df.show()

如果正常返回Snowflake版本信息,说明连接配置成功。

注意:如果执行过程中仍有报错,可先检查Azure侧服务主体的令牌生成权限是否正常,确认令牌未过期、Scope配置准确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 16:15:01