如何授予用户访问 BigQuery 数据集中的 table 的权限,并让该数据集出现在项目中?

How can I give permission to a user to access a table in a dataset in BigQuery and have the dataset appear in the project?

我想向用户授予访问数据集中 table 列表(并非所有 table 的列表)的权限。

这是我的 bigquery 架构:

|Project
  |-Dataset
    |-table1
    |-table2

假设我希望我的用户只看到 table1.

  1. 如果我在数据集级别为我的用户添加数据查看器 IAM 权限,分层策略导致 tables 1 和 2 继承 IAM 权限,这不好,因为他可以看到 table2
  2. 如果我在 table 级别向用户添加数据查看器 IAM 权限,则用户可以通过 link 或查询访问 table1,但 无法在 BiqQuery 中看到数据集 UI

有没有办法让 table 1 和数据集出现时没有 table 2?

一个好的解决方案:

  • 在数据集级别添加 IAM 元数据查看器。
  • 在 table 级别添加一个 IAM 数据查看器。

客户端可以同时看到 table(1 和 2),但只能访问来自 table1 的数据。

您可以使用 GRANT statement 将特定 table 的权限授予使用 BigQuery 的特定用户。如果它是查看者,您必须授予您想要的角色,就像:

GRANT `roles/bigquery.dataViewer`
ON TABLE my_dataset.my_table
TO "user:user@domain.com"

但是您要搜索的角色是 bigquery.metadataViewer 授予数据集的此角色将提供读取元数据以及列出 table 的权限。 此角色也可以应用于 table/view,因此用户必须明确列出他们希望看到的 table 的权限,而不是整个数据集。

GRANT `roles/bigquery.metadataViewer`
ON TABLE `my_dataset._my_table`
TO "user:user@domain.com"

此外,第二个用户可以固定项目。这会让他看到项目、数据集和他有权访问的 tables。