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(数据集)、TABLE、VIEW和EXTERNAL。 | 
| 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_name和object_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.com 拥有对 mydataset 数据集的 bigquery.dataOwner 角色。用户 cloudysanfrancisco@gmail.com 继承了在 mydataset 中创建、更新和删除表的权限,包括 testdata 表。不过,由于未明确针对 testdata 表授予这些权限,因此不会显示在第二个示例的结果中。