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
PRIVLEGE_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 |
  +----------------+---------------+--------------+-------------+----------------------+------------------------------------+