2017-11-14 1 views
0

Ich habe eine Django-App mit einer MySQL-Datenbank. Ich erstellte eine Datenbank foo, dann erstellt einen neuen Benutzer foo_user, gewährte alle Berechtigungen auf foo.* zu foo_user, und räumte Berechtigungen.Django - MySQL: 1045 Zugriff verweigert für 'user' @ 'localhost'

Ich kann von der Kommandozeile melden Sie sich als foo_user und SHOW GRANTS; das gibt mir dies:

+-----------------------------------------------------------+ 
| Grants for [email protected]        | 
+-----------------------------------------------------------+ 
| GRANT USAGE ON *.* TO 'foo_user'@'localhost'    | 
| GRANT ALL PRIVILEGES ON `foo`.* TO 'foo_user'@'localhost' | 
+-----------------------------------------------------------+ 

Ich kann von Python verbinden diese Schnipsel mit:

import MySQLdb 

try: 
    db = MySQLdb.connect('localhost', 'foo_user', 'verysecurepassword', 'foo') 
    cursor = db.cursor() 
    cursor.execute('SHOW GRANTS;') 
    results = cursor.fetchall() 

    for r in results: 
     print(r) 
except MySQLdb.Error as e: 
    print(e) 

Dies druckt die Privilegien für foo_user wie man es erwarten würde.

settings.py

db_pass = '' 
db_pass_file = os.path.join(os.path.expanduser('~'), 'db.passwd') 
with open(db_pass_file, 'r') as dbpf: 
    db_pass = dbpf.read() 

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.mysql', 
     'NAME': 'foo', 
     'USER': 'foo_user', 
     'PASSWORD': db_pass, 
     'HOST': 'localhost', 
     'PORT': '3306', 
    }, 
} 

Allerdings, wenn ich zu makemigrations versuchen bekomme ich

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

Ich habe den Rat von jeder SO Antwort folgte ich finden konnte. Ich habe Datenbanken und Benutzer gelöscht und sie dann mehrmals neu erstellt. Ich kann nichts offensichtliches falsch finden und der Fehler selbst ist nicht sehr hilfreich. Meine Frage ist: Wie kann ich mehr Informationen aus MySQL oder Django herausholen, damit ich herausfinden kann, was falsch läuft?

ETA: Python 3.5.2, Django 1.11.7, MySQL Ver 14.14 Distrib 5.7.20, auf einer EC2-Instanz läuft

Antwort

0

Das Problem war ein extra Newline-Zeichen am Ende des Passworts aus der Datei gelesen werden .

wurde die Lösung

db_pass = dbpf.read()

zu

db_pass = dbpf.read().rstrip()

ändern
Verwandte Themen