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

如何通过Python创建BigQuery的Row Access Policy行级安全策略

Python实现BigQuery行级安全策略创建方案

前置准备

  • 首先安装BigQuery Python客户端:pip install google-cloud-bigquery
  • 完成GCP身份认证:本地开发可执行gcloud auth application-default login,生产环境建议配置服务账号密钥环境变量GOOGLE_APPLICATION_CREDENTIALS为密钥文件路径。

实现方式1:直接执行DDL语句(推荐,适配性最高)

你已经写好的创建SQL可以直接通过Python客户端提交执行,不需要额外适配逻辑,代码示例如下:

from google.cloud import bigquery

# 初始化BigQuery客户端,参数替换为你自己的GCP项目ID
client = bigquery.Client(project="chrome-coast-332")

# 行级安全策略创建SQL
create_rap_sql = """
CREATE OR REPLACE ROW ACCESS POLICY test
ON `chrome-coast-332.Test.你的表名`
GRANT TO ("user:user@gmail.com")
FILTER USING (gender = "F");
"""

# 提交执行SQL,等待任务完成
query_job = client.query(create_rap_sql)
query_job.result()

print("行级安全策略创建成功")

实现方式2:调用客户端原生API创建(适合动态生成策略场景)

如果需要动态拼接策略名称、授权对象、过滤条件,也可以直接调用客户端封装的行级访问策略接口,无需手动拼接SQL:

from google.cloud import bigquery
from google.cloud.bigquery import RowAccessPolicy

# 初始化客户端
client = bigquery.Client(project="chrome-coast-332")

# 获取目标表的引用,依次替换为你的数据集名称、表名称
table_ref = client.dataset("Test").table("你的表名")

# 构造行级访问策略对象
rap = RowAccessPolicy(
    name="test",
    filter_expression="gender = 'F'",
    grantees=["user:user@gmail.com"]
)

# 创建或更新策略
client.update_row_access_policy(table_ref, rap)

print("行级安全策略创建成功")

注意事项

  • 执行操作的账号需要具备对应表的bigquery.rowAccessPolicies.create和bigquery.rowAccessPolicies.update权限,一般表Owner、BigQuery Admin、BigQuery Data Editor角色默认包含对应权限。
  • 同一张表下的行级安全策略名称必须唯一,使用CREATE OR REPLACE语法或者update接口会直接覆盖已存在的同名策略。
  • 授权对象支持user:、serviceAccount:、group:、domain:前缀的身份标识,也可以指定allUsers、allAuthenticatedUsers等特殊群组。

内容的提问来源于stack exchange,提问作者Filipe Wolfrum caeiros

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 03:15:02