Ich habe dieses Problem für ein paar Tage festgefahren.Wie berechtige ich den Zugriff auf einen Datenbankbenutzer in Google Cloud SQL ordnungsgemäß?
Ich habe eine Anwendung für Appengine mit Django entwickelt und möchte Google Cloud SQL für meine Datenbank verwenden. Alles funktioniert gut, bis ich auf dem Entwicklungsserver anwenden Migrationen wollen, wenn es mit dem folgenden Fehler fehl:
django.db.utils.OperationalError: (1045, "Access denied for user 'MY_DB_USER'@'MY_IP' (using password: YES)")
Was ich getan habe, ist wie folgt:
Ich folgte den Anweisungen in der Django Support Seite zu entwickeln meine Anwendung.
Um eine Cloud SQL-Instanz der ersten Generation zu erstellen, folgte ich die Schritte beschrieben here, mit dem Cloud SDK.
- Ich habe dann einen neuen Benutzer nach den Anweisungen here erstellt und ihm ein Passwort zugewiesen.
entfaltet ich die Anwendung die folgende Befehlszeile verwenden:
gcloud Vorschau App MY-APP-DIR/deploy app.yaml --Version 0-1-0
ich meine IP autorisiert und meine AppEngine-Anwendungs-ID Sie sind beide im Abschnitt "Authorization" unter "Access Control" in meiner SQL-Instanz aufgeführt.
Schließlich habe ich versucht, Migrationen mit der folgenden Befehlszeile anwenden:
SETTINGS_MODE = 'prod' MY-APP-DIR/manage.py
settings.py
wandertder relevante Teil meiner settings.py sieht wie folgt aus:
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',
}
}
Irgendeine Idee, was könnte das Problem verursachen?
Vielen Dank!