我们正在探索使用 BigQuery 政策标签来实现列级安全性。我们发现,当用户无权访问的列包含在 GROUP BY 子句中时,用户也无法访问 GROUP BY 子句中的其他列。
让我用一个人为的例子来解释。想象一下,我们有一个t
包含两列的表:
t.a
t.b
这些列上有策略标签,授予我们的最终用户查看数据的权限,t.a
但不允许查看t.b
.
因此我们的最终用户可以发出这个查询:
select a
from t
但是在发出此查询时:
select b
from t
他们得到一个错误:
访问被拒绝:BigQuery BigQuery:用户无权访问列 project.dataset.tb 上的策略标签“policy-tag-name”
这是意料之中的,也是设计使然。
但是,如果用户发出此查询:
select a
from (
select a, b
from t
group by a, b
)
然后发生同样的错误。
为什么是这样?用户没有访问任何他们不允许访问的数据。我正在努力理解为什么 group by 语句会导致此错误。任何人都可以启发我吗?