13 Stimmen

Django - (OperationalError) FATAL: Ident-Authentifizierung für Benutzer "Benutzername" fehlgeschlagen

Ich habe ein einfaches sqlalchemy-Django-Modell gemäß dieser Anleitung geschrieben: http://lethain.com/replacing-django-s-orm-with-sqlalchemy/, das für mich ziemlich gut funktioniert hat.
Mein Django ist mit einer entfernten PostgreSQL-Datenbank verbunden, mit diesen Einstellungen:

DATABASES = {
'default': {
    'ENGINE': 'django.db.backends.postgresql_psycopg2', # Fügen Sie 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' oder 'oracle' hinzu.
    'NAME': 'wetlab_dev',                               # Oder Pfad zur Datenbankdatei bei Verwendung von sqlite3.
    'USER': 'limlim',                                 # Wird bei sqlite3 nicht verwendet.
    'PASSWORD': '',                                     # Wird bei sqlite3 nicht verwendet.
    'HOST': 'cab-27',                                   # Für localhost auf leeren String setzen. Wird bei sqlite3 nicht verwendet.
    'PORT': '',                                         # Für Standardwert auf leeren String setzen. Wird bei sqlite3 nicht verwendet.
    }
}

Es hat vor ein paar Tagen für mich funktioniert, aber jetzt, wenn ich versuche, die 'Startseite' erneut zu laden, zeigt es mir folgende Fehlermeldung:

(OperationalError) FATAL: Identifikationsauthentifizierung für Benutzer "limlim" fehlgeschlagen

Die sqlalchemy-Motorkonfiguration lautet:

CONNECTION_STR = 'postgresql://limlim:@cab-27/wetlab_dev'

engine = sqlalchemy.create_engine(CONNECTION_STR)   

Es scheint, als hätte ich nichts geändert, was mit den Datenbankkonfigurationen zusammenhängt, aber dennoch erhalte ich diese Fehlermeldung.
Außerdem, wenn ich versuche, mich mit meinem Benutzernamen mit der Datenbank auf dem entfernten Server zu verbinden, gelingt mir dies, also gehe ich davon aus, dass es kein Problem mit den Berechtigungen für meinen Benutzernamen gibt, auf diese Datenbank zuzugreifen.

Was kann getan werden, um diesen Fehler zu überwinden?

40voto

Craig Ringer Punkte 280068

Ihr pg_hba.conf ist konfiguriert, um 'ident'-Authentifizierung für Verbindungen von localhost (127.0.0.1) zu verwenden. Sie müssen es für Ihre Datenbank und Benutzerkombination auf md5 ändern.

5voto

Mehady Punkte 110

@Craig hat recht, muss die Authentifizierungsmethode des Datenbankbenutzers in der Datei pg_hba.conf aktualisieren, hier ist, was ich gemacht habe:

sudo nano /var/lib/pgsql/data/pg_hba.conf

Gehen Sie ans Ende der Datei und ändern Sie dann die Methode von ident auf md5 in den IPv4- und IPv6-Zeilen:

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" ist nur für Unix-Domain-Socket-Verbindungen
local   all             all                                     peer
# IPv4 Lokale Verbindungen:
host    all             all             127.0.0.1/32            md5  # <- hier
# IPv6 Lokale Verbindungen:
host    all             all             ::1/128                 md5  # <- und hier
# Replikationsverbindungen von localhost erlauben, von einem Benutzer mit
# Replikationsprivileg.
#local   replication     postgres                                peer
#host    replication     postgres        127.0.0.1/32            ident
#host    replication     postgres        ::1/128                 ident

Happy Coding :)

1voto

chihab mg Punkte 11
  local   all             all                                     peer

# IPv4 local connections:
host    all             all             127.0.0.1/32            trust < from ident to trust 
# IPv6 local connections:
host    all             all             ::1/128                 trust < ich habe das von ident zu trust geändert 
# Allow replication connections from localhost, by a user with the
# replication privilege.
local   replication     all                                     peer
host    replication     all             127.0.0.1/32            ident
host    replication     all             ::1/128                 ident

Denken Sie daran, PostgreSQL neu zu starten:

sudo systemctl restart postgresql

0voto

Hatte denselben Fehler, nur um ihn in meinem Fall zu lösen, habe ich anstelle von md5 trust verwendet. Das liegt daran, dass 1) Django SELECT-, INSERT-, DELETE- und UPDATE-Berechtigungen benötigt und 2) die Verwendung des Postgres-Benutzers kein Passwort erfordert.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X