例如,我们假设我的表格private.all_customers
包含架构{customer:string, id:integer, is_secret:boolean}
。
我想让我们的销售人员访问字段customer
和id
,但不能访问is_secret
,此外,我还想授予他们访问权限的权限那些is_secret = false
行。我怎么能做到这一点?
答案 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?