在群集上启用 Hive 元存储表访问控制(旧版)
本文介绍如何为群集上的内置 Hive 元存储启用表访问控制。
若要了解在群集上启用表访问控制后如何在 Hive 元存储安全对象上设置特权,请参阅 Hive 元存储特权和安全对象(旧版)。
注意
Hive 元存储表访问控制是一种旧式数据治理模型。 Databricks 建议你改用 Unity Catalog,因其简易性和以帐户为中心的治理模型。 可将 Hive 元存储管理的表升级到 Unity Catalog 元存储。
为群集启用表访问控制
表访问控制以两个版本提供:
- 仅限 SQL 的表访问控制,它将用户限制为只使用 SQL 命令。
- Python 和 SQL 表访问控制,它允许用户运行 SQL、Python 和 PySpark 命令。
机器学习运行时不支持表访问控制。
重要
即使为群集启用了表访问控制,Azure Databricks 工作区管理员仍然有文件级数据的访问权限。
仅限 SQL 的表访问控制
此版本的表访问控制将用户限制为只使用 SQL 命令。
若要在群集上启用仅限 SQL 表的访问控制并将该群集限制为仅使用 SQL 命令,请在群集的 Spark 配置中设置以下标志:
spark.databricks.acl.sqlOnly true
注意
对仅限 SQL 表访问控制的访问权限不受管理员设置页中启用表访问控制设置的影响。 此设置仅控制是否在工作区范围启用 Python 和 SQL 表访问控制。
Python 和 SQL 表访问控制
此版本的表访问控制允许用户运行使用数据帧 API 和 SQL 的 Python 命令。 在群集上启用此控制后,该群集上的用户:
- 只能使用 Spark SQL API 或数据帧 API 访问 Spark。 在这两种情况下,管理员会根据 Azure Databricks 的你可以在 Hive 元存储对象上授予的特权来限制对表和视图的访问。
- 必须在群集节点上运行其命令,因为低特权用户禁止访问文件系统的敏感部分或创建与 80 和 443 以外的端口的网络连接。
- 只有内置 Spark 函数可以在 80 和 443 以外的端口上创建网络连接。
- 只有工作区管理员用户或具有任意文件特权的用户才能通过 PySpark JDBC 连接器从外部数据库读取数据。
- 如果希望 Python 进程能够访问其他出站端口,可以将 Spark 配置
spark.databricks.pyspark.iptable.outbound.whitelisted.ports
设置为要加入允许列表的端口。 支持的配置值格式为[port[:port][,port[:port]]...]
,例如:21,22,9000:9999
。 端口必须位于有效范围内,即0-65535
。
尝试绕过这些限制将失败,并出现异常。 由于存在这些限制,用户永远无法通过群集来访问非特权数据。
为工作区启用表访问控制
在用户可以配置 Python 和 SQL 表访问控制之前,Azure Databricks 工作区管理员必须为 Azure Databricks 工作区启用表访问控制,并拒绝用户访问未启用表访问控制的群集。
- 转到设置页。
- 单击“安全”选项卡。
- 启用“表访问控制”选项。
强制实施表访问控制
为了确保用户只访问你希望他们访问的数据,你必须只允许用户访问已启用表访问控制的群集。 具体而言,你应确保:
- 用户无权创建群集。 如果在没有表访问控制的情况下创建群集,则可以从该群集访问任何数据。
- 对于任何未启用表访问控制的群集,用户没有“可附加到”权限。
有关详细信息,请参阅计算权限。
创建启用了表访问控制的群集
默认情况下,在具有共享访问模式的群集中启用表访问控制。
若要使用 REST API 创建群集,请参阅创建新群集。
设置对数据对象的特权
请参阅 Hive 元存储特权和安全对象(旧版)。