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
表授予这些权限,因此不会显示在第二个示例的结果中。