重点在于行级权限实际上是在为视图授权。该视图定义了您想要委派用户查看的行和列,而不会让他们访问基础表。
为此,请创建可以返回您希望用户查看的行和列的视图。对于上面的示例,该视图将如下所示:
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.public_customers”视图运行查询。
要了解此功能的更高级用法,可以使您为不同的用户提供不同的答案,请参见此问题:
如何在BigQuery中为不同的行授权给不同的用户而不创建单独的视图?