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

时间:2015-04-16 18:01:49

标签: google-bigquery

谷歌今天宣布了此功能,但我没有看到任何文档。如何向用户授予行级权限?

例如,我们假设我的表格private.all_customers包含架构{customer:string, id:integer, is_secret:boolean}

我想让我们的销售人员访问字段customerid,但不能访问is_secret,此外,我还想授予他们访问权限的权限那些is_secret = false行。我怎么能做到这一点?

1 个答案:

答案 0 :(得分:6)

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

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

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

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

请注意,到目前为止, NOT 意味着分析师可以访问数据。如果他们现在试图运行它们,它们将会出错。仅仅访问一个读取表的视图并不能访问该表上的基础数据。如果确实如此,那么任何人都可以创建一个视图来读取他们想要看到的任何数据。

第二步是将该视图添加到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?