【问题标题】:unable to run query against BigQuery - permission error 403无法针对 BigQuery 运行查询 - 权限错误 403
【发布时间】:2019-03-03 04:19:27
【问题描述】:

我有一个IAM 用户,其角色:BigQuery Data Editor 在我的数据集中,我做了Share dataset 添加了具有Can Edit 权限的用户。

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

当我将角色BigQuery User 添加到我的IAM 用户时,脚本有效。

脚本仅运行来自此数据集中表的 SELECT 查询。

我不明白为什么我必须授予 BigQuery User 才能使其工作。

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

基本原理:dataEditor 角色通过发布来扩展 bigquery.dataViewer 数据集中表的创建、更新、删除权限

roles/bigquery.dataViewer 有 bigquery.tables.getData 获取表数据

我在这里做错了什么?

【问题讨论】:

    标签: google-cloud-platform google-bigquery


    【解决方案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 角色(创建作业/查询) .

    【讨论】:

    • 我不确定我明白了。所以 dataEditor 可以从 UI 运行查询,但不能从脚本运行?
    • 不,dataEditor 用户可以在 UI 中查看表中的信息及其内容(架构、详细信息和预览),但也无法在那里运行查询。我将更新我的答案以澄清那部分。
    • 得到同样的错误。但在我这边,我可以在查询编辑器中运行查询,但不能从脚本中运行。我需要什么样的许可?
    • 这非常有用。我将dataEditor 设置为服务帐户,奇怪的是,它可以在数据集表中插入数据,即使does not have bigquery.jobs.create 出现在日志中也是如此。现在我改为User。
    猜你喜欢
    • 2016-01-30
    • 1970-01-01
    • 1970-01-01
    • 2021-03-27
    • 2021-10-22
    • 2018-07-19
    • 2016-04-03
    • 2011-10-02
    • 1970-01-01
    相关资源
    最近更新 更多