OBJECT_PRIVILEGES 视图

INFORMATION_SCHEMA.OBJECT_PRIVILEGES 视图包含有关在 BigQuery 对象上明确设置的访问权限控制绑定的元数据。此视图不包含有关继承的访问权限控制绑定的元数据。

所需权限

要查询 INFORMATION_SCHEMA.OBJECT_PRIVILEGES 视图,您需要以下 Identity and Access Management (IAM) 权限:

  • bigquery.datasets.get(数据集)。
  • bigquery.tables.getIamPolicy(表和视图)。

如需详细了解 BigQuery 权限,请参阅使用 IAM 进行访问权限控制

架构

当您查询 INFORMATION_SCHEMA.OBJECT_PRIVILEGES 视图时,查询结果会针对资源的每个访问权限控制绑定返回一行。

INFORMATION_SCHEMA.OBJECT_PRIVILEGES 视图具有如下架构:

列名 数据类型
OBJECT_CATALOG STRING 包含资源的项目的项目 ID。
OBJECT_SCHEMA STRING 包含资源的数据集的名称。如果资源本身就是数据集,则为 NULL
OBJECT_NAME STRING 政策应用于的表、视图或数据集的名称。
OBJECT_TYPE STRING 资源类型,例如 SCHEMA(数据集)、TABLEVIEWEXTERNAL
PRIVILEGE_TYPE STRING 角色 ID,例如 roles/bigquery.dataEditor
GRANTEE STRING 被授予角色的用户类型和用户。

范围和语法

针对此视图的查询必须包含区域限定符。项目 ID 是可选的。如果未指定项目 ID,则使用运行查询的项目。下表说明了此视图的区域范围:

视图名称 资源范围 区域范围
[PROJECT_ID.]`region-REGION`.INFORMATION_SCHEMA.OBJECT_PRIVILEGES 项目级 REGION
替换以下内容:

  • 可选:PROJECT_ID:您的 Google Cloud 项目的 ID。如果未指定,则使用默认项目。

  • REGION:任何数据集区域名称。例如 `region-us`

  • 示例

    -- Returns metadata for the access control bindings for mydataset.
    SELECT * FROM myproject.`region-us`.INFORMATION_SCHEMA.OBJECT_PRIVILEGES
    WHERE object_name = "mydataset";
    

    限制

    • OBJECT_PRIVILEGES 查询必须包含 WHERE 子句,才能将查询限制为单个数据集、表或视图。
    • 检索数据集的访问权限控制元数据的查询必须指定 object_name
    • 检索表或视图的访问权限控制元数据的查询必须指定 object_nameobject_schema

    示例

    以下示例从 INFORMATION_SCHEMA.OBJECT_PRIVILEGES 视图中检索所有列。

    如需针对运行查询的项目以外的项目运行查询,请按以下格式将相应项目 ID 添加到区域中:`project_id`.`region_id`.INFORMATION_SCHEMA.OBJECT_PRIVILEGES

    以下示例获取 mycompany 项目中 mydataset 数据集的所有访问权限控制元数据:

    SELECT *
    FROM mycompany.`region-us`.INFORMATION_SCHEMA.OBJECT_PRIVILEGES
    WHERE object_name = "mydataset"
    

    结果应如下所示:

      +----------------+---------------+-------------+-------------+---------------------------+-----------------------------------+
      | object_catalog | object_schema | object_name | object_type |  privilege_type           | grantee                           |
      +----------------+---------------+-------------+-------------+---------------------------+-----------------------------------+
      | mycompany      | NULL          | mydataset   | SCHEMA      | roles/bigquery.dataEditor | projectEditor:mycompany           |
      +----------------+---------------+-------------+-------------+---------------------------+-----------------------------------+
      | mycompany      | NULL          | mydataset   | SCHEMA      | roles/bigquery.dataOwner  | projectOwner:mycompany            |
      +----------------+---------------+-------------+-------------+---------------------------+-----------------------------------+
      | mycompany      | NULL          | mydataset   | SCHEMA      | roles/bigquery.dataOwner  | user:cloudysanfrancisco@gmail.com |
      +----------------+---------------+-------------+-------------+---------------------------+-----------------------------------+
      | mycompany      | NULL          | mydataset   | SCHEMA      | roles/bigquery.dataViwer  | projectViewer:mycompany           |
      +----------------+---------------+-------------+-------------+---------------------------+-----------------------------------+
      

    以下示例获取 mydataset 数据集中 testdata 表的所有访问权限控制信息:

    SELECT *
    FROM mycompany.`region-us`.INFORMATION_SCHEMA.OBJECT_PRIVILEGES
    WHERE object_schema = "mydataset" AND object_name = "testdata"
    

    结果应如下所示:

      +----------------+---------------+--------------+-------------+----------------------+------------------------------------+
      | object_catalog | object_schema |  object_name | object_type |  privilege_type      | grantee                            |
      +----------------+---------------+--------------+-------------+----------------------+------------------------------------+
      | mycompany      | mydataset     | testdata     | TABLE       | roles/bigquery.admin | user:baklavainthebalkans@gmail.com |
      +----------------+---------------+--------------+-------------+----------------------+------------------------------------+
      

    INFORMATION_SCHEMA.OBJECT_PRIVILEGES 视图仅显示明确设置的访问权限控制绑定。第一个示例显示,用户 cloudysanfrancisco@gmail.commydataset 数据集具有 bigquery.dataOwner 角色。用户 cloudysanfrancisco@gmail.com 会继承在 mydataset 中创建、更新和删除表(包括 testdata 表)的权限。不过,由于未明确针对 testdata 表授予这些权限,因此不会显示在第二个示例的结果中。