无法针对BigQuery运行查询-权限错误403

时间:2018-09-27 09:31:25

标签: google-cloud-platform google-bigquery

我有一个IAM用户,其角色是:BigQuery Data Editor 在我的数据集中,我确实Share dataset向用户添加了Can Edit特权。

但是,当我运行访问BigQuery的脚本时,出现错误403

当我向IAM用户添加角色BigQuery User时,脚本便起作用了。

该脚本仅从该数据集中的表中运行SELECT查询。

我不明白为什么我必须为此授予BigQuery User

根据文档https://cloud.google.com/bigquery/docs/access-control

  

合理性:dataEditor角色通过发出以下内容扩展了bigquery.dataViewer   为数据集中的表创建,更新,删除特权

roles/bigquery.dataViewer具有bigquery.tables.getData可以获取表格数据

我在这里做什么错了?

1 个答案:

答案 0 :(得分:1)

访问数据并能够通过查询检索数据是不同的事情,而这正是混乱的根源。

根据文档,roles/bigquery.dataEditor具有以下权限:

  • 读取数据集的元数据并列出数据集中的表。
  • 创建,更新,获取和删除数据集的表。

这意味着具有此角色的用户有权访问和操作数据集的信息及其中的表。例如,具有此角色的用户可以通过GCP控制台(模式,详细信息和预览选项卡)导航到该表,从而看到所有表信息,但是当尝试在该表中运行查询时,将显示以下消息:

  

访问被拒绝:项目<PROJECT-ID>:用户<USER>在项目<PROJECT-ID>中没有bigquery.jobs.create权限。

现在让我们检查一下roles/bigquery.user权限:

  

在项目中运行作业(包括查询)的权限。

此处的关键元素是BigQuery User角色可以运行作业,而BigQuery DataEditor不能运行。 BigQuery Jobs是管理BigQuery任务的对象,其中包括正在运行的查询。

有了这些信息,在roles comparison matrix中就很清楚,对于您要完成的工作,您将需要BigQuery DataEditor角色(获取表数据/元数据)和BigQuery User角色(创建作业/查询)。