如何在 BigQuery 中使用行级权限?

Posted

技术标签:

【中文标题】如何在 BigQuery 中使用行级权限?【英文标题】:How do I use row-level permissions in BigQuery? 【发布时间】:2015-04-16 18:01:49 【问题描述】:

Google 今天宣布了这项功能,但我没有看到任何有关它的文档。如何向用户授予行级权限?

例如,假设我有一个表private.all_customers,其架构为customer:string, id:integer, is_secret:boolean

我希望我们的销售人员可以访问customerid 字段,但不能访问is_secret,此外,我想只允许他们访问is_secret = false 所在的行。我怎样才能做到这一点?

【问题讨论】:

【参考方案1】:

行级权限的关键部分是您实际上是在授予视图权限。视图定义了您希望委派用户查看的行和列,而不授予他们访问基础表的权限。

为此,请创建将返回您希望用户看到的行和列的视图。对于上面的示例,视图如下所示:

SELECT customer, id FROM private.all_customers where is_secret = false

然后我可以将其保存为视图“public.public_customers”,并与分析师共享public 数据集。

请注意,到目前为止,这意味着分析师可以访问数据。如果他们现在尝试运行它,他们会得到一个错误。仅仅访问读取表的视图并不能让您访问该表上的基础数据。如果是这样,那么任何人都可以创建一个视图来读取他们想查看的任何数据。

第二步是将该视图添加到 private 数据集的 ACL。这样做是记录视图应该有权访问数据。这样private 数据集的所有者可以审核谁有权访问他们的数据,并在必要时撤销它。

将视图添加到 ACL 的最简单方法是使用 BigQuery Web UI。如果您在 Web UI 中单击 private 数据集名称旁边的箭头并单击“共享此数据集”,它将弹出一个对话框,让您可以编辑 ACL。 在该对话框的底部,它将显示“添加人员”和左侧的可点击图标。如果单击该图标,您应该能够选择“授权视图”。选择后,您应该输入视图的完全限定名称 -- project:dataset.view。在我们的示例中,这将是my-project:public.public_customers。点击“添加”,它将显示在列表中,然后点击“保存更改”提交。

视图添加到 ACL 后,任何有权访问“公共”数据集的人都应该能够针对 public.public_customers 视图运行查询。

这个功能的更高级用法,可以让你对不同的用户给出不同的答案,请看这个问题:How do I give different users access to different rows without creating separate views in BigQuery?

【讨论】:

我能够在组织内设置行级权限。但在外面我无法提供访问权限。它给出“数据集配置错误 Data Studio 无法连接到您的数据集。无法从基础数据集中获取数据”

以上是关于如何在 BigQuery 中使用行级权限?的主要内容,如果未能解决你的问题,请参考以下文章

在 Google 表格中使用 BigQuery,如何授予其他用户按“刷新”的权限?

Bigquery 行级安全性

如何授予查看者从 Data Studio 更改 BigQuery 参数的权限

如何通过 API(补丁)授予对 BigQuery 数据集的新视图访问权限

如何设置 Airflow DAG 权限以查询基于 Google Sheets 文档构建的 BigQuery 表?

GAE 上的 BigQuery:根据开发人员的访问权限运行数据