如何正确授予 Google Cloud SQL 中的数据库用户访问权限?

How to properly grant access to a database user in Google Cloud SQL?

我已经被这个问题困扰了几天。

我使用 Django 为 appengine 开发了一个应用程序,我想为我的数据库使用 Google Cloud SQL。一切正常,直到我想在开发服务器失败并出现以下错误时在开发服务器上应用迁移:

django.db.utils.OperationalError: (1045, "Access denied for user 'MY_DB_USER'@'MY_IP' (using password: YES)")

我所做的如下:

  1. 我按照 Django Support 页面中的说明进行操作 开发我的应用程序。

  2. 为了创建第一代 Cloud SQL 实例,我遵循了 here 概述的步骤,使用 Cloud SDK。

  3. 然后我按照说明创建了一个新用户 here 并为其分配了密码。
  4. 我使用以下命令行部署了应用程序:

    gcloud preview app deploy MY-APP-DIR/app.yaml --version 0-1-0

  5. 我授权了我的 IP 和我的 AppEngine 应用程序 ID。它们都列在我的 SQL 实例中“'Access Control'”下的“'Authorization'”部分中。

  6. 最后,我尝试使用以下命令行应用迁移:

    SETTINGS_MODE='prod' MY-APP-DIR/manage.py migrate

settings.py

我的 settings.py 的相关部分如下所示:

if os.getenv('SERVER_SOFTWARE', '').startswith('Google App Engine'):
    DEBUG = False
    # Running on production App Engine, so use a Google Cloud SQL database.
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'HOST' : '/cloudsql/[MY-PROYECT-ID]:[MY-CLOUD-SQL-INSTANCE]',
            'NAME': '[MY-DB-NAME]',
            'USER': 'root',
        }
    }
elif os.getenv('SETTINGS_MODE') == 'prod':
    DEBUG = False
    # Running in development, but want to access the Google Cloud SQL instance
    # in production.
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': '[MY-DB-NAME]', # db name. 
            'USER': '[MY-DB-USER]',
            'PASSWORD' : '[MY-DB-USER-PASSWORD]',
            'HOST' : '[IPV4 ASSIGNED IN GOOGLE CONSOLE]',
            'PORT': '3306',
        }
    }
else:
    # Running in development, so use a local MySQL database.
    DEBUG = True
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': '[MY-LOCAL-DB]',
            'USER': 'root',
            'PASSWORD': 'root',
        }
    }

知道可能导致问题的原因吗?

谢谢!

终于明白问题出在哪里了

授予用户数据库访问权限以应用迁移的正确方法如下:

  1. 将您的 IP 列入白名单。它应该显示在 'Authorized Networks'
  2. 创建一个新的数据库用户帐户,但是不要选择'Allow any host (%)'通配符,而是select "Restrict host by name, address, or address range" 选项并分配您的 IP(您刚刚列入白名单的 IP)。
  3. 您现在应该可以 运行 使用以下命令进行迁移:SETTINGS_MODE='prod' PROJECT_DIR/manage.py migrate

作为旁注,请确保主机为 localhost root 用户没有 密码,否则您的 App Engine 应用程序将无法使用'能够连接到数据库。

希望这对其他人有帮助!