webentwicklung-frage-antwort-db.com.de

Django-Einstellung: psycopg2.OperationalError: FATAL: Peer-Authentifizierung für Benutzer "indivo" fehlgeschlagen

Ich habe Probleme mit der Einstellung von Django-Projekten mit POSTGRESQL.

Hier ist meine setting.py-Datenbankeinstellung 

DATABASES = {
    'default':{
        'ENGINE':'Django.db.backends.postgresql_psycopg2', # '.postgresql_psycopg2', '.mysql', or '.Oracle'
        'NAME':'indivo', # Required to be non-empty string
        'USER':'indivo', # Required to be non-empty string
        'PASSWORD':'ritvik',
        'Host':'', # Set to empty string for localhost.
        'PORT':'', # Set to empty string for default.
        },
}

Jetzt im Postgres Backend ist was ich getan habe.

[email protected]:~$ Sudo su - postgres
[email protected]:~$ createuser --superuser indivo   # create a super user indivo
[email protected]:~$ psql  # open psql terminal 
psql (9.1.8)
Type "help" for help.

postgres=# \password indivo  # set the password ritvik
Enter new password: 
Enter it again: 
postgres=# \q   #logout 
[email protected]:~$ createdb -U indivo -O indivo indivo  #create db indivo 

Leider bekomme ich den Fehler, wenn ich versuche, syncdb zu synchronisieren.

psycopg2.OperationalError: FATAL:  Peer authentication failed for user "indivo"

Bitte helfen Sie mir, was ich hier falsch mache.

40
masterofdestiny

Ich habe ein ähnliches Problem und habe es mit dieser Antwort gelöst, indem ich localhost zu den Host-Einstellungen der Datenbank in settings.py hinzufügte, sodass Ihre Datenbankeinstellungen so aussehen sollten:

DATABASES = {
    'default':{
        'ENGINE':'Django.db.backends.postgresql_psycopg2', # '.postgresql_psycopg2', '.mysql', or '.Oracle'
        'NAME':'indivo', # Required to be non-empty string
        'USER':'indivo', # Required to be non-empty string
        'PASSWORD':'ritvik',
        'Host':'localhost', # Set to empty string for localhost.
        'PORT':'', # Set to empty string for default.
        },
}
43
juliocesar

In vielen Linux-Distributionen ist die Client-Authentifizierung für Unix-Socket-Verbindungen zur DB standardmäßig auf "Peer" gesetzt. Dies wird in der pg_hba.conf config-Datei für postgresql festgelegt. Die Dokumentation der psycopg2-Python-Bibliothek besagt:

- * Host *: Datenbank-Hostadresse (standardmäßig UNIX-Socket, falls nicht angegeben)

Wenn Sie also die Host-Option leer lassen, versucht Ihr Skript, eine Verbindung herzustellen und das Unix-Benutzername: Kennwort für die Authentifizierung zu verwenden. Um dies zu beheben, können Sie entweder:

  1. setzen Sie die Option "Host" in dem in Ihre Frage eingefügten Konfigurationscode explizit auf 127.0.0.1.
  2. Ändern Sie die pg_hba.conf-Datei, um md5 für Socket-Verbindungen zu verwenden, sodass Benutzernamen und Kennwörter verwendet werden, die im DB-Benutzerspeicher der postrgres-Datenbank gespeichert sind.
26
queso

Sie müssen pg_hba.conf einstellen, um md5-Authentifizierung für die interessierende Benutzer-, Datenbank- und Quell-IP zu verwenden. Siehe das Kapitel client authentication der Dokumentation.

Suchen Sie nach pg_hba.conf im Stack Overflow, um weitere Informationen zu erhalten.

6
Craig Ringer

Ich hatte auch ähnliche Probleme beim Einrichten der Postgresql-Datenbank mit Django-Projekt.

Mein System führt RHEL CentOS 7 mit Postgresql Version 10 aus. Ich suche viel, konnte aber nicht finden, was passiert, bis ich unter /var/lib/pqsql/10/data/log/postgresql*.log das Protokoll sah

2017-11-10 00: 31: 40.499 IST [14129] DETAIL: Verbindung stimmt mit Zeile 85 von pg_hba.conf überein: "Host all all :: 1/128 ident"

Also habe ich gerade diese Zeile in der Datei /var/lib/pgsql/10/data/pg_hba.conf geändert: FromHost all all :: 1/128 ident

zu 

Host all all: 1/128 md5

damit kann ich mit manage.py migrate datenbank & tabelle erstellen

Vielen Dank für alle, die mir geholfen haben, diese Lösung zu finden. speziell @juliocesar und offizielle Dokumentation für die Authentifizierung von Postgresql-Clients

0
Gopal Prasad