当前位置: 首页 > 知识库问答 >
问题:

获取驱动器凭据时权限被拒绝-无法解决错误

段干麒
2023-03-14

我希望在我遇到的这个错误代码上得到一些帮助。

语境:

  • 我工作的公司使用GSUITE产品。
  • 我的团队有自己的云项目设置。
  • 谷歌硬盘不是个人硬盘。
  • 我们使用Airflow每天/每周/每月刷新BigQuery表。

我遵循了这些解决方案

拒绝访问:获取驱动器凭据时拒绝权限

使用带有Google工作表的BigQueryAPI时出现“全局文件模式时遇到错误”错误

还引用了https://cloud.google.com/bigquery/external-data-drive#python_3

问题

云作曲家:v1.12。0

我最近设置了一个外部BigQuery表,读取Google Sheet中的选项卡。由于驱动器的访问限制,我的气流DAG未能完成。我在气流连接范围中添加了以下内容:

气流范围

并且还将服务帐户电子邮件地址添加到Google表中,该表通过共享引用。我还将服务帐户IAM角色更新为BigQuery admin。执行这些步骤后,我仍然收到错误BigQuery:获取驱动器凭据时权限被拒绝。

问题2

根据以上内容,我发现在本地进行故障排除更容易,所以我在我的机器上创建了一个VENV,因为在这里我最容易进行故障排除。目标是简单地查询一个读取Google工作表的Bigquery表。然而,在遵循上述相同步骤之后,我仍然无法使其工作。

我的本地代码:

import dotenv
import pandas as pd
from google.cloud import bigquery
import google.auth

def run_BigQuery_table(sql):
    dotenv.load_dotenv()
    credentials, project = google.auth.default(
        scopes=[
            "https://www.googleapis.com/auth/cloud-platform",
            "https://www.googleapis.com/auth/drive",
            "https://www.googleapis.com/auth/bigquery",
        ]
    )
    bigquery.Client(project, credentials)
    output = pd.read_gbq(sql, project_id=project, dialect='standard')
    return output

script_variable = "SELECT * FROM `X` LIMIT 10"

bq_output = run_BigQuery_table(script_variable)
print(bq_output)

我的错误:

提高自我_谷歌例外。api_核心。例外情况。禁止:403访问被拒绝:BigQuery BigQuery:权限被拒绝

引发GenericGBQException(“原因:{0}.format(ex))\u gbq。gbq。GenericGBQException:原因:403拒绝访问:BigQuery BigQuery:权限

有人能帮忙吗?

干杯

共有2个答案

罗学真
2023-03-14

我经常会遇到这些错误,大多数错误都是通过创建和共享服务帐户解决的。然而,我最近遇到了一个案例,我们的gsuite管理员更新了安全设置,只有我们的员工才能访问gsuite相关的内容(电子表格、存储等)。这是一次试图填补安全漏洞的尝试,但在这样做时,任何电子邮件地址或服务帐户都没有@ourcompany。com被阻止使用BigQuery。

我建议您查看公司的gsuite设置,看看外部访问是否被阻止。我不能说这是你的案子的解决办法,但这是对我来说的,所以值得一试。。

司寇星海
2023-03-14

因此,一位同事建议我探索默认pandas_gbq凭据,因为这可能是使用默认凭据访问数据。

事实证明,它起了作用。

您可以通过以下方式手动设置gbq凭据:https://pandas-gbq.readthedocs.io/en/latest/howto/authentication.html https://pandas-gbq.readthedocs.io/en/latest/api.html#pandas_gbq.Context.credentials

我只是在代码中添加了以下内容

pdgbq.context.credentials = credentials

最后的产出:

import dotenv
import pandas as pd
from google.cloud import bigquery
import google.auth
import pandas_gbq as pdgbq


def run_BigQuery_table(sql):
    dotenv.load_dotenv()
    credentials, project = google.auth.default(
        scopes=[
            "https://www.googleapis.com/auth/cloud-platform",
            "https://www.googleapis.com/auth/drive",
            "https://www.googleapis.com/auth/bigquery",
        ]
    )
    pdgbq.context.credentials = credentials
    bigquery.Client(project, credentials)
    output = pd.read_gbq(sql, project_id=project, dialect='standard')
    return output

script_variable4 = "SELECT * FROM `X` LIMIT 10"

bq_output = run_BigQuery_table(script_variable3)
print(bq_output)
 类似资料:
  • 我正在尝试将DataStudio报表连接到表和来自BigQuery的视图。在BigQuery中,表从位于我的驱动器中的GoogleSheet接收数据,视图正在查询同一个表,但添加了一些新字段。当我尝试将图表连接到其中一个数据源时,出现以下错误: BigQuery错误:访问被拒绝:BigQuery BigQuery:获取驱动器凭据时权限被拒绝。 原因是什么?我该怎么做才能解决这个问题? 我要说的是,

  • 从今天起,我们的Airflow服务无法访问BigQuery中的查询。所有作业都会失败,并显示以下消息: [2021-03-12 10:17:28079]{taskinstance.py:1150}错误-原因:403获取https://bigquery.googleapis.com/bigquery/v2/projects/waipu-app-prod/queries/e62030d7-36eb-4

  • 我正在使用@google-Cloud/bigQuery将Angular10, Firebase与BigQuery集成。我在我的项目中创建了一个函数文件夹,并在其中添加了密钥json文件,该文件是在谷歌云控制台上生成服务帐户json后获得的。 我的BigQuery仪表板中有两个数据集,其源是Google Drive。但当我试图查询这些表时,我得到了一个错误。 在我的函数文件夹中,我有index.js

  • 下面是我最初的问题,但我尝试了几个查询,最后接近解决问题。 在本教程之后,我成功地从GoogleApps脚本访问了BigQuery,但当查询包含GoogleSheet链接表时,会出现“获取驱动器凭据时权限被拒绝”错误。 由于BigQuery提供了一个创建与GoogleSheet链接的表的选项,所以我在这个设置中有几个表。 没有链接表的查询可以工作,所以代码的基本设置很好,我相信凭据设置在BigQu

  • 复制步骤: 在Google Sheets中创建工作表 启用部署管理器 我已经找到了一些这样的线索,但是它们都引用了使用“范围”来添加。我不知道如何向部署管理器请求添加作用域,也不知道作用域是如何工作的。 任何帮助都将不胜感激。

  • 问题内容: 我运行 npm install lodash, 但它抛出 错误:EACCES:权限被拒绝 错误。我知道这是权限问题,但据我所知,本地安装节点模块不需要sudo权限。如果我使用sudo运行它,它将安装在〜/ node_modules文件夹中。 drwxrwxr-x 是现有文件夹的文件许可权。我不知道可能出了什么问题。 下面是错误消息。 问题答案: 使用 npm init 创建 packa