web-dev-qa-db-fra.com

Paramètre Django: psycopg2.OperationalError: FATAL: l'authentification homologue a échoué pour l'utilisateur "indivo"

Je rencontre un problème de configuration de projet Django avec POSTGRESQL.

Voici mon paramètre de base de données setting.py 

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.
        },
}

Maintenant, dans postgres backend, ce que j'ai fait est.

rohit@rohit-desktop:~$ Sudo su - postgres
postgres@rohit-desktop:~$ createuser --superuser indivo   # create a super user indivo
postgres@rohit-desktop:~$ 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 
postgres@rohit-desktop:~$ createdb -U indivo -O indivo indivo  #create db indivo 

Malheureusement, lorsque j'essaie de synchroniser, je reçois l'erreur.

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

Aidez-moi s'il vous plaît ce que je peux faire de mal ici.

40
masterofdestiny

J'ai un problème similaire et je l'ai résolu avec cette réponse en ajoutant localhost aux paramètres de la base de données Host dans settings.py, vos paramètres de base de données devraient donc ressembler à ceci:

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

Par défaut, dans de nombreuses distributions Linux, l'authentification du client est définie sur "peer" pour les connexions socket Unix à la base de données. Ceci est défini dans le fichier de configuration pg_hba.conf pour postgresql. La documentation de la bibliothèque psycopg2 python indique:

- * Host *: adresse de l'hôte de la base de données (par défaut, socket UNIX si non fourni)

Ainsi, si vous laissez l'option Hôte vide, votre script essaiera de se connecter et d'utiliser le nom d'utilisateur Unix: mot de passe pour l'authentification. Pour résoudre ce problème, vous pouvez soit:

  1. définir explicitement l'option "Hôte" sur 127.0.0.1 dans le code de configuration que vous avez collé dans votre question.
  2. Modifiez le fichier pg_hba.conf pour qu'il utilise md5 pour les connexions socket afin qu'il utilise les noms d'utilisateur et les mots de passe stockés dans le magasin d'utilisateurs DB posttrgres (non recommandé car cela pourrait empêcher l'authentification des utilisateurs du système).
26
queso

Vous devez définir pg_hba.conf pour utiliser l'authentification md5 pour l'utilisateur, la base de données et l'adresse IP source qui vous intéresse. Voir le chapitre authentification client de la documentation.

Recherchez pg_hba.conf sur Stack Overflow pour plus d'informations.

6
Craig Ringer

Moi aussi, je rencontrais un problème similaire lors de la configuration de la base de données postgresql avec le projet Django.

Mon système exécute RHEL CentOS 7 avec la version 10 de Postgresql. Je cherche beaucoup mais je ne trouve pas ce qui se passe réellement tant que je ne me suis pas connecté au journal /var/lib/pqsql/10/data/log/postgresql*.log

2017-11-10 00: 31: 40.499 IST [14129] DETAIL: Connexion correspondante, ligne 85 de pg_hba.conf: "Tout héberger tous :: 1/128 ident"

Donc, je viens de changer cette ligne particulière dans le fichier /var/lib/pgsql/10/data/pg_hba.conf: FromHost all all :: 1/128 ident

à 

Tout héberger :: 1/128 md5

avec qui je suis capable de créer une base de données et une table en utilisant manage.py migrate

Merci à tous ceux qui m'ont aidé à trouver cette solution. en particulier @juliocesar et la documentation officielle pour l'authentification client postgresql

0
Gopal Prasad