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

如何获取有权访问数据表及对应列的用户、组与服务账号?

获取BigQuery数据表及列级权限的方法

你可以通过BigQuery的API来获取数据表(包括列)级别的权限,而非依赖你当前使用的Cloud Resource Manager(仅用于项目级权限查询)。以下是具体实现步骤和代码:

核心思路

BigQuery的权限分为数据集级别、表级别和列级别,需通过对应API接口分别查询:

  • 表级别权限:调用tables.getIamPolicy接口
  • 列级别权限:从表元数据中提取嵌套的列级权限绑定(列权限作为表IAM政策的一部分存储)

实现代码

from google.oauth2 import service_account
import googleapiclient.discovery

# 初始化BigQuery服务客户端
credentials = service_account.Credentials.from_service_account_file(
    filename='.../key.json',
    scopes=['https://www.googleapis.com/auth/cloud-platform']
)
bigquery_service = googleapiclient.discovery.build('bigquery', 'v2', credentials=credentials)

# 1. 获取表级别权限
project_id = 'test-project'
dataset_id = 'your-dataset-id'
table_id = 'your-table-id'

table_iam_response = bigquery_service.tables().getIamPolicy(
    projectId=project_id,
    datasetId=dataset_id,
    tableId=table_id,
    body={}
).execute()

print("表级别权限:")
print(table_iam_response)

# 2. 获取列级别权限(列权限嵌套在表的IAM政策中)
table_metadata = bigquery_service.tables().get(
    projectId=project_id,
    datasetId=dataset_id,
    tableId=table_id
).execute()

# 提取列级权限绑定
column_bindings = []
if 'iamPolicy' in table_metadata and 'bindings' in table_metadata['iamPolicy']:
    for binding in table_metadata['iamPolicy']['bindings']:
        # 列权限的role会包含列名,格式如roles/bigquery.dataViewer@columns:column1,column2
        if '@columns:' in binding['role']:
            column_bindings.append(binding)

print("\n列级别权限:")
print(column_bindings)

关键说明

  • 确保你的服务账号拥有bigquery.tables.get和bigquery.tables.getIamPolicy权限(可通过分配BigQuery Data Viewer或BigQuery Admin角色实现)
  • 列权限的角色格式为roles/bigquery.[role]@columns:[column1],[column2],通过识别该格式可筛选出列级绑定
  • 若需查询数据集级别权限,可调用datasets.getIamPolicy接口,逻辑与表级别权限查询类似

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 21:22:20