You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于BigQuery登录用户的团队属性实现行级安全?

利用用户团队属性实现BigQuery行级安全

当然可以通过用户-团队映射表结合session_user()实现基于团队的行级数据限制,具体实现方式如下:

核心思路

在行级安全策略的FILTER USING子句中关联用户-团队映射表,用session_user()获取当前登录用户的邮箱,匹配其所属团队,再与目标表的团队字段对比,实现仅显示用户所属团队的数据。

示例实现

假设你有两张表:

  • 目标表:dataset.tablename,包含需要限制的业务数据,字段含team_id(团队标识)
  • 用户-团队映射表:dataset.user_team_mapping,字段为user_email(用户登录邮箱)、team_id(所属团队ID)

基于IN子查询的策略

CREATE OR REPLACE ROW ACCESS POLICY team_based_policy
ON dataset.tablename
GRANT TO ("group:groupname-group@company.com")
FILTER USING (
  -- 仅显示当前用户所属团队的数据
  team_id IN (
    SELECT team_id
    FROM dataset.user_team_mapping
    WHERE user_email = session_user()
  )
);

基于EXISTS的优化策略(适合多对多映射场景)

如果一个用户属于多个团队,用EXISTS通常性能更优:

CREATE OR REPLACE ROW ACCESS POLICY team_based_policy
ON dataset.tablename
GRANT TO ("group:groupname-group@company.com")
FILTER USING (
  EXISTS (
    SELECT 1
    FROM dataset.user_team_mapping utm
    WHERE utm.user_email = session_user()
      AND utm.team_id = dataset.tablename.team_id
  )
);

注意事项

  • 确保行级安全策略的执行者拥有dataset.user_team_mapping表的读取权限,否则策略会因无法查询映射数据而失效。
  • 若需要给管理员开放全量数据访问,可在FILTER USING中添加例外条件:
    FILTER USING (
      EXISTS (...)
      OR session_user() = 'admin@company.com' -- 管理员不受限制
    );
    

内容的提问来源于stack exchange,提问作者Jo Geo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 16:31:16