google.cloud.bigquery.Client忽略指定scope导致获取Drive凭证权限被拒如何解决
解决步骤
- 第一步:重新生成带Drive权限的本地应用默认凭证
本地此前通过gcloud auth application-default login生成的缓存凭证默认没有Drive访问权限,且google.auth.default会优先复用已有缓存,忽略代码中传入的scopes参数。执行以下命令重新生成带对应权限的凭证:
执行后会弹出浏览器授权,用你当前的项目所有者账号完成授权即可。gcloud auth application-default login --scopes=https://www.googleapis.com/auth/bigquery,https://www.googleapis.com/auth/drive - 第二步:修正代码的客户端初始化写法
显式指定BigQuery客户端的构造参数,避免位置参数顺序变更导致的传值错误,修正后代码如下:import google.auth from google.cloud import bigquery credentials, project = google.auth.default( scopes=[ "https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/bigquery", ] ) # 显式指定参数名,避免位置参数传错 client = bigquery.Client(project=project, credentials=credentials) query = client.query("""MY SQL HERE""") query_results = query.result() - 第三步:确认Drive资源权限
确认你的授权用户账号对查询涉及的Drive文件/文件夹有至少查看者权限,否则即使scope配置正确也会触发权限报错。
内容的提问来源于stack exchange,提问作者Ian
相关产品推荐
相关产品推荐

