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

时间:2016-04-18 01:32:48

标签: django google-app-engine gcloud

我已经坚持这个问题了几天。

我使用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实例 使用Cloud SDK概述了here的步骤。

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

    gcloud预览应用部署MY-APP-DIR / app.yaml --version 0-1-0

  5. 我授权了我的IP和AppEngine应用程序ID。它们都列在我的SQL实例中“访问控制”下的“授权”部分中。

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

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

  7. 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 个答案:

答案 0 :(得分:0)

我终于找到了问题所在。

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

  1. 白名单列出您的IP。它应显示在“授权网络”
  2. 创建一个新的数据库用户帐户,但是不要选择“允许任何主机(%)”通配符,而不是选择“按名称,地址限制主机,或地址范围“选项并分配您的IP(您刚刚列入白名单的那个)。
  3. 您现在应该可以使用以下命令运行迁移:SETTINGS_MODE='prod' PROJECT_DIR/manage.py migrate
  4. 作为旁注,请确保主机为root localhost用户没有密码,否则您的App Engine应用程序将无法连接到数据库。

    希望这有助于其他人!