为群集启用表访问控制

备注

本文包含对术语“列入允许列表”的引用,这是 Azure Databricks 不再使用的术语。 在从软件中删除该术语后,我们会将其从本文中删除。

本文介绍如何为群集启用表访问控制。

有关在群集上启用了表访问控制后如何对数据对象设置特权的信息,请参阅数据对象特权

为群集启用表访问控制

表访问控制以两个版本提供:

  • 仅限 SQL 的表访问控制,它将用户限制为只使用 SQL 命令。 你将限制为只能使用 Apache Spark SQL API,因此无法使用 Python、Scala、R、RDD API 或直接从云存储中读取数据的客户端(例如 DBUtils)。
  • Python 和 SQL 表访问控制,它允许用户运行 SQL、Python 和 PySpark 命令。 你将限制为只能使用 Spark SQL API 和数据帧 API,因此无法使用 Scala、R、RDD API 或直接从云存储中读取数据的客户端(例如 DBUtils)。

重要

即使为群集启用了表访问控制,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 数据治理模型由管理员来限制对表和视图的访问。
  • 必须在群集节点上运行其命令,因为低特权用户禁止访问文件系统的敏感部分或创建与 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 工作区启用表访问控制。
  • 拒绝用户访问未启用表访问控制的群集。 在实践中,这意味着拒绝大多数用户创建群集的权限,并拒绝用户对未为表访问控制启用的群集的“可以附加到”权限。

有关这两种要求的信息,请参阅为工作区启用表访问控制

创建启用了表访问控制的群集

创建集群时,单击“启用表访问控制并仅允许使用 Python 和 SQL 命令”选项。 此选项仅对于高并发群集可用。

启用表访问控制

若要使用 REST API 创建群集,请参阅有关创建启用了表访问控制的群集的示例

设置对数据对象的特权

请参阅数据对象特权