2010-03-14 9 views
18

Ich habe die ganze Einrichtung auf meinem lokalen Computer für Monate arbeitet
Ich bin jetzt auf einem Remote-Standort zu installieren
eine neue MySQL-DB, und erstellt ein.. neue Benutzer ("someuser") und gab es vollständige Zuschüsse, wie so -Django: mysql: 1045 „, verweigern Zugang für Benutzer

GRANT ALL PRIVILEGES ON TO 'einbenutzer' @ BY 'irgendein' Option GRANT 'localhost' IDENTIFIED;

.

Ich habe die db synchronisiert, uns In "python manage.py syncdb" wurden die korrekten Tabellen erstellt. Meine settings.py hat denselben Benutzer.

Aber wenn ich versuche, einen Benutzer durch die Anwendung anzumelden, und es trifft die DB, sehe ich die folgenden in den Protokollen -

(1045, „Zugriff verweigert für Benutzer‚einbenutzer‘@ 'localhost '(mit Passwort: YES) ")

angemeldet ich durch mysql in (auf dem gleichen Feld wie django installiert ist) und die Zuschüsse geprüft und es zeigt, richtig -

Grants für einbenutzer @ localhost
GRANT ALLE PRIVILEGES ON *. * TO ‚einbenutzer‘ @ ‚localhost‘

Ich will nicht das Root-Benutzer/Passwort für django verwenden mit einem Passwort ‚* thesaltedpasswordOverHere‘ WITH GRANT OPTION IDENTIFIED, da es die richtige Art und Weise nicht zu sein scheint.

Irgendwelche Hinweise, was könnte falsch sein?

+0

Erinnerst du dich, wenn du das funktioniert hast? – theblang

Antwort

22

Ich mache es, wie dies für eine Datenbank mit dem Namen foo_db:

create database foo_db; 
create user foo_user identified by 'foo_password'; 
grant all on foo_db.* to 'foo_user'@'%'; 
flush privileges; 
+0

Danke das hat geholfen! Ich denke der Grund ist, dass ich zuerst die Benutzer und dann die Datenbank erstellt habe. Das ist sehr seltsam, "coz, wenn Sie auf das Stipendium schauen und es sagt, Sie haben Zugang zu *. * Es ist irreführend. Sie sollte auch auf das angewendet werden, was nach dieser Instanz erstellt wird. – PlanetUnknown

+0

Ich versuche tatsächlich dasselbe zu tun, was PlanetUnknown getan hat. Ich folgte Ihrer Methode, aber ich bekomme immer noch den gleichen Fehler. – theblang

0

@ mattblang:

In diesem Fall hilft es, wenn der Host gesetzt wird auch in der tatsächlich verwendeten settings.py Datei.

Für mich ist es /etc/graphite/local_settings.py wo der DATABASES Stanzas einen falschen Wert hatte, für HOST war: 'HOST': '127.0.0.1',

Weil es für localhost gesucht während der Laufzeit syncdb Befehl, habe ich es zu 'HOST': 'localhost',

jetzt sieht es so etwas wie diese:

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

... und jetzt den syncdb Befehl python manage.py syncdb wird erfolgreich ausgeführt.

5

In meinem Fall die Einstellungen.py hat folgendes:

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.mysql', 
     'NAME': 'TRYDJANGO', 
     'USERNAME':'user_trydjango', 
     'PASSWORD':'passtry', 
     'PORT':'3306', 
     'HOST': 'localhost', 
    } 
} 

Und es funktioniert, wenn ich die 'username' auf 'USER' ändern:

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.mysql', 
     'NAME': 'TRYDJANGO', 
     'USER':'user_trydjango', 
     'PASSWORD':'passtry', 
     'PORT':'3306', 
     'HOST': 'localhost', 
    } 
} 
0

Auch die Portnummer ändern zu ‚3307'if MySQl-Python 64-bit in settings.py, dann nur die Verbindung in Windows und MySql 5,7 django passiert.

'3306' für MySQl-Python-32-Bit-

DATABASES = { 
    'default': { 
     'NAME': 'graphite', 
     'ENGINE': 'django.db.backends.mysql', 
     'USER': 'graphite', 
     'PASSWORD': 'thepasswordyouchoose', 
     'HOST': 'localhost', 
     'PORT': '3307' 
    } 
} 
0

auf die Antwort von @duffymo verweise und änderten die letzte Aussage könnte für mich arbeiten.

create database foo_db; 
create user foo_user identified by 'foo_password'; 
grant all on foo_db.* to [email protected] identified by 'foo_password' with grant option; 
0

soweit ich verstanden einbenutzer ein Benutzer DB Gast ist und nicht der Administrator ein, nicht wahr?

Wenn ja, von Ihrem MySQL DB Admin-Benutzer gewähren einbenutzer MySQL-Umgebung Tabelle zuzugreifen 'mysql.user' wie folgt:

GRANT ON mysql SELECT. user TO 'someuser' @ '%';

Für mich es funktionierte, Ivan

0

ich diese Konfiguration verwenden, und es funktioniert.

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.mysql', 
    'OPTIONS': { 
     'read_default_file': '/etc/my.cnf', 
    }, 
     #'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), 
    } 
} 
0

Es scheint, dass alles, was ich getan habe, ist:

  1. fallen meine Datenbank
  2. den Benutzer fallen
  3. neu erstellen den Benutzer
  4. neu erstellen die Datenbank
  5. Gewähren Sie diesem Benutzer Berechtigungen zum Sperren

und dann beginnt es zu arbeiten.

+0

Danke, dass Sie sich die Zeit genommen haben, eine Antwort beizutragen. Es ist wegen der hilfsbereiten Kollegen wie dir, dass wir zusammen als Gemeinschaft lernen können. Hier sind ein paar Tipps, wie Sie Ihre Antwort großartig machen können: [Wie schreibe ich eine gute Antwort] (https://stackoverflow.com/help/how-to-answer). – Brien

Verwandte Themen