使用服务主体生成的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 tablebrxxxx8.0xxxxxxx.
User does not have permission USAGE on databasebrxxxx8. SQLSTATE: 42501
已为服务主体授予Databricks SQL访问权限及仓库的“Can manage”权限,但错误仍存在,需解决权限问题。
解决方法
- 检查Unity Catalog层面的权限配置:
仓库的“Can manage”权限仅覆盖仓库资源操作,不包含数据库、表等数据对象的访问权限,需单独在Unity Catalog中分配:- 对目标数据库
brxxxx8授予USAGE权限; - 对目标表
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
相关产品推荐
相关产品推荐

