使用服务帐户的Google Cloud SQL导入权限

Fra*_*oel 4 user-permissions google-cloud-storage google-cloud-sql service-accounts google-cloud-platform

我已经按照《MySQL导出指南》成功导出了MySQL数据库。

现在,我正在尝试按照《MySQL导入指南》导入MySQL数据库。

我已经检查了service_account_email我正在使用的权限,并且同时允许了Admin SQLAdmin Storage权限。

我可以使用以下命令在本地成功激活我的服务帐户:

gcloud auth activate-service-account <service_account_email> --key-file=<service_account_json_file>  
Run Code Online (Sandbox Code Playgroud)

运行命令后:

gcloud sql import sql <instance> <gstorage_file> --database=<db_name> --async
Run Code Online (Sandbox Code Playgroud)

我得到此信息:

{
  "error": {
    "errors": Array[1][
      {
        "domain": "global",
        "reason": "required",
        "message": "Login Required",
        "locationType": "header",
        "location": "Authorization"
      }
    ],
    "code": 401,
    "message": "Login Required"
  }
}
Run Code Online (Sandbox Code Playgroud)

我尝试过的其他事情

我还尝试使用service_account_emailSQL实例的,该实例来自:

gcloud sql instances describe <instance_name>
Run Code Online (Sandbox Code Playgroud)

但是,它似乎有相同的错误。

根据给出的REST API JSON错误,如何使用进行“登录”,service_account_email这样我就不会得到401 Error

Sco*_*ott 9

云 SQL 实例在不属于您的项目的 Google 服务帐户下运行。您需要授予此用户对 Cloud Storage 中要导入的文件的权限。这是一个方便的 dandy bash 片段,可以做到这一点。

SA_NAME=$(gcloud sql instances describe YOUR_DB_INSTANCE_NAME --project=YOUR_PROJECT_ID --format="value(serviceAccountEmailAddress)")
gsutil acl ch -u ${SA_NAME}:R gs://YOUR_BUCKET_NAME;
gsutil acl ch -u ${SA_NAME}:R gs://${YOUR_BUCKET_NAME}/whateverDirectory/fileToImport.sql;
Run Code Online (Sandbox Code Playgroud)

第一行获取服务帐户电子邮件地址。下一行授予此服务帐户对存储桶的读取权限。最后一行授予服务帐户对该文件的读取权限。

  • 如果之后想删除权限(删除所有权限) `gsutil acl ch -d ${SA_NAME} gs://YOUR_BUCKET_NAME` 和 `gsutil acl ch -d ${SA_NAME} gs://YOUR_BUCKET_NAME/file.sql` (2认同)

Fah*_*bid 7

问题是有关数据库实例服务帐户在创建的存储桶上写入的权限。解决此问题的步骤

1)转到您的Cloud SQL实例并复制实例的服务帐户(Cloud SQL-> {instance name}-> OVERVIEW-> Service帐户)

2)复制服务帐户后,转到要转储的Cloud Storage Bucket并对该帐户设置所需的权限(存储-> {bucket name}-> permissions-> add成员)。