如何根据访问Data Studio报表的用户/所属群组动态调整BigQuery查询
Looker Studio对接BigQuery实现跨国行级数据权限方案
首先明确:支持识别访问仪表板的用户/用户组身份,不需要为每个国家单独维护报表,以下是两种成熟的落地方案:
方案1:BigQuery行级访问策略(RLS)(最推荐,维护成本最低)
该方案将权限控制收敛到BigQuery层,报表侧无需任何特殊配置,安全性最高:
- 第一步:准备权限映射关系,可选两种实现:
- 方式A:创建用户-国家映射表,存储所有可访问用户的邮箱和对应国家编码
- 方式B:为每个国家创建对应的谷歌云用户组,把对应国家的用户加入对应组
- 第二步:为业务表创建行级访问策略,示例代码如下:
(用用户组的示例)
(用映射表的示例)CREATE OR REPLACE ROW ACCESS POLICY country_level_access ON `your_project.dataset.mytable` GRANT TO ("allAuthenticatedUsers") FILTER USING ( CASE WHEN IS_SESSION_MEMBER('esp-users@yourdomain.com') THEN country = 'ESP' WHEN IS_SESSION_MEMBER('fra-users@yourdomain.com') THEN country = 'FRA' -- 新增国家只需加对应规则即可 ELSE FALSE END );CREATE OR REPLACE ROW ACCESS POLICY country_level_access ON `your_project.dataset.mytable` GRANT TO ("allAuthenticatedUsers") FILTER USING ( country IN ( SELECT country_code FROM `your_project.dataset.user_country_map` WHERE user_email = SESSION_USER() ) ); - 第三步:Looker Studio直接对接BigQuery原生业务表即可,所有用户访问同一份报表,自动获取对应国家的数据。
方案2:Looker Studio自定义查询+内置用户参数(适合无BigQuery权限配置权限的场景)
该方案无需修改BigQuery层配置,仅在报表侧修改查询即可实现:
- 使用Looker Studio内置的
@report_viewer_email系统参数,该参数会自动代入当前访问报表的用户邮箱,搭配用户-国家映射表实现动态过滤,示例查询如下:SELECT t.* FROM `your_project.dataset.mytable` t INNER JOIN `your_project.dataset.user_country_map` m ON t.country = m.country_code AND m.user_email = @report_viewer_email - 该方案只需维护1份报表,新增国家/调整用户权限仅需更新映射表数据即可。
不推荐使用报表内置过滤器手动分配权限的方案:该方案用户可手动修改过滤器值,存在数据泄露风险,安全性无保障。
内容的提问来源于stack exchange,提问作者Luiscri
相关产品推荐
相关产品推荐

