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

使用服务主体生成的Databricks Token调用SQL Execution API权限不足问题

问题:服务主体创建的Databricks Token调用SQL Execution API权限不足

操作流程

我通过服务主体而非个人访问令牌创建Databricks Token,执行代码如下:

host = 'host'
client_id = 'clientId'
oauth_secret = 'secretKey' 
endpoint = '/oidc/v1/token'
url = f'{host}{endpoint}'

data = {
  "grant_type": "client_credentials",
  "scope": "all-apis"
}

auth = (client_id, oauth_secret)
oauth_response = requests.post(url, data=data, auth=auth)
oauth_token = oauth_response.json()['access_token']

endpoint = '/api/2.0/token/create'
url = f'{host}{endpoint}'

headers = {
    "Authorization": f"Bearer {oauth_token}"
}
payload = {
    "comment": "TestTokenCreation"
}

response = requests.post(url, headers=headers, json=payload)
response.json()

执行后成功获取到Token:

{'token_value': 'dapixxxxxxxxxxx',
 'token_info': {'token_id': 'xxxxxxxxxxxxxxxxxxx',
  'creation_time': 1715055980619,
  'expiry_time': -1,
  'comment': 'TestTokenCreation'}}

但使用该Token调用Databricks SQL Execution API查询仓库数据时,出现权限错误:

[INSUFFICIENT_PERMISSIONS] Insufficient privileges:

User does not have permission SELECT on table brxxxx8.0xxxxxxx.

User does not have permission USAGE on database brxxxx8. SQLSTATE: 42501

已为服务主体授予Databricks SQL访问权限及仓库的“Can manage”权限,但错误仍存在,需解决权限问题。

解决方法

  • 检查Unity Catalog层面的权限配置:
    仓库的“Can manage”权限仅覆盖仓库资源操作,不包含数据库、表等数据对象的访问权限,需单独在Unity Catalog中分配:
    1. 对目标数据库brxxxx8授予USAGE权限;
    2. 对目标表brxxxx8.0xxxxxxx授予SELECT权限;
      可通过Databricks UI的Unity Catalog页面操作,或执行SQL命令:
    -- Azure环境格式
    GRANT USAGE ON DATABASE brxxxx8 TO `service-principal://<tenant-id>/<client-id>`;
    GRANT SELECT ON TABLE brxxxx8.0xxxxxxx TO `service-principal://<tenant-id>/<client-id>`;
    
    -- AWS/GCP环境格式
    GRANT USAGE ON DATABASE brxxxx8 TO `service-principal:<client-id>`;
    GRANT SELECT ON TABLE brxxxx8.0xxxxxxx TO `service-principal:<client-id>`;
    
  • 确认服务主体的身份引用格式:
    在Unity Catalog中配置权限时,需根据云环境使用正确的服务主体格式,避免因格式错误导致权限无法关联到目标主体。
  • 验证权限的直接关联性:
    确保权限是直接授予服务主体本身,而非通过组间接授予(若使用组,需确认服务主体已正确加入对应组,且组权限配置无误);同时检查数据库所在的父目录是否存在权限限制,阻断了服务主体的访问。
  • 确认Token关联的身份正确性:
    调用Databricks的/api/2.0/preview/scim/v2/Me接口,传入创建的Token,验证返回的身份信息是否为目标服务主体,排除Token关联身份错误的可能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 10:46:05