如何让DE/ML角色强制使用Databricks SQL权限模型并自主创建集群?
解决方案
方法1:使用Unity Catalog统一权限模型(推荐)
放弃在集群策略中直接配置存储的Spark认证参数,改用Unity Catalog实现跨SQL/DE/ML的统一权限:
- 在Unity Catalog中创建外部位置,配置好访问数据湖的Service Principal或托管身份权限,无需在集群中暴露密钥。
- 修改集群策略,强制启用Unity Catalog并保留Table ACLs配置:
"spark_conf.spark.databricks.unityCatalog.enabled": { "type": "fixed", "value": "true" }, "spark_conf.spark.databricks.acl.dfAclsEnabled": { "type": "fixed", "value": "true" } - 用户创建集群后,直接通过Unity Catalog中分配的Schema/Table权限访问数据,完全复用Databricks SQL的权限体系,无需处理存储认证的secret。
方法2:授予用户群组有限的Secret访问权限
如果必须保留现有存储认证方式,可给DE/ML用户所在群组授予目标Secret的只读权限(而非整个Secret Scope):
- 在Databricks Secrets界面,找到
SQLEndpointScope,给用户群组添加对ClientID和ClientSecret这两个Secret的READ权限。 - 这样用户创建集群时,集群策略中的Secret引用能正常解析,同时用户无法访问该Scope下的其他Secret,保证安全性。
方法3:使用Azure托管身份替代Client Credentials
针对Azure环境,改用托管身份访问ADLS Gen2,无需嵌入Client Secret:
- 给Databricks工作区的系统分配/用户分配托管身份授予数据湖的Blob存储Reader/Contributor权限。
- 修改集群策略中的Spark配置为托管身份认证方式:
"spark_conf.spark.hadoop.fs.azure.account.auth.type.datalake.dfs.core.windows.net": { "type": "fixed", "value": "OAuth" }, "spark_conf.spark.hadoop.fs.azure.account.oauth.provider.type.datalake.dfs.core.windows.net": { "type": "fixed", "value": "org.apache.hadoop.fs.azurebfs.oauth2.MsiTokenProvider" }, "spark_conf.spark.hadoop.fs.azure.account.oauth2.client.id.datalake.dfs.core.windows.net": { "type": "fixed", "value": "<你的托管身份Client ID>" }, "spark_conf.spark.hadoop.fs.azure.account.oauth2.msi.endpoint.datalake.dfs.core.windows.net": { "type": "fixed", "value": "https://management.azure.com/subscriptions/<订阅ID>/resourceGroups/<资源组>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<托管身份名称>/?api-version=2018-11-30" } - 这种方式下,用户创建集群时无需访问任何Secret,认证由Azure自动处理,集群策略可正常生效。
方法4:预配置共享集群并开放附加权限
如果以上方法都不适用,可预创建符合要求的共享集群,同时开放用户附加权限:
- 管理员创建启用Table ACLs和存储认证的共享集群。
- 给用户群组授予该集群的
Attach权限,用户可直接使用该集群,无需自行创建,仍能复用Databricks SQL的权限模型。
内容的提问来源于stack exchange,提问作者Saugat Mukherjee
相关产品推荐
相关产品推荐

