lorsque je crée un nouvel utilisateur, mais il ne peut pas se connecter à la base de données.
Je fais ça comme ça:
postgres@Aspire:/home/XXX$ createuser dev
Shall the new role be a superuser? (y/n) n
Shall the new role be allowed to create databases? (y/n) y
Shall the new role be allowed to create more new roles? (y/n) y
puis créez une base de données:
postgres@Aspire:/home/XXX$ createdb -O dev test_development
après cela, j'essaye de me psql -U dev -W test_development
connecter, mais j'obtiens l'erreur:
psql: FATAL: Peer authentication failed for user "dev"
J'ai essayé de résoudre le problème mais j'ai échoué.
postgresql
hsming
la source
la source
--interactive
à la commande:createuser --interactive joe
Réponses:
Essayer:
où
-U
est le nom d'utilisateur de la base de données-h
est le nom d'hôte / IP du serveur local, évitant ainsi les sockets de domaine Unix-d
est le nom de la base de données à laquelle se connecterCeci est ensuite évalué comme une connexion "réseau" par Postgresql plutôt qu'une connexion socket de domaine Unix, donc non évalué comme une connexion "locale" comme vous pouvez le voir dans
pg_hba.conf
:la source
psql [option...] [dbname [username]]
, donc vous penseriez quepsql dbname username
cela fonctionnerait ..\c glossary john
FATAL: Peer authentication failed for user "john"
puis avec\c glossary john localhost
Password for user john:
SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off)
You are now connected to database "glossary" as user "john" on host "localhost" at port "5432".
cela a fonctionné.Votre connexion a échoué car, par défaut, se
psql
connecte sur des sockets UNIX à l'aide de l'peer
authentification, ce qui nécessite que l'utilisateur UNIX actuel ait le même nom d'utilisateur quepsql
. Vous devrez donc créer l'utilisateur UNIXdev
puis vous connecter en tant quedev
ou utilisersudo -u dev psql test_development
pour accéder à la base de données (etpsql
ne pas demander de mot de passe).Si vous ne pouvez pas ou ne voulez pas créer l'utilisateur UNIX, comme si vous voulez simplement vous connecter à votre base de données pour des requêtes ad hoc , forcer une connexion socket en utilisant
psql --host=localhost --dbname=test_development --username=dev
(comme souligné par la réponse @meyerson) résoudra votre problème immédiat.Mais si vous avez l'intention de forcer l'authentification par mot de passe sur les sockets Unix au lieu de la méthode homologue, essayez de modifier la
pg_hba.conf
ligne * suivante :de
à
peer
signifie qu'il fera confiance à l'identité (authenticité) de l'utilisateur UNIX. Donc pas de demande de mot de passe.md5
signifie qu'il demandera toujours un mot de passe et le validera après le hachage avecMD5
.Bien sûr, vous pouvez également créer des règles plus spécifiques pour une base de données ou un utilisateur spécifique, certains utilisateurs ayant
peer
et d'autres nécessitant des mots de passe.Après avoir changé
pg_hba.conf
si PostgreSQL est en cours d'exécution, vous devrez lui faire relire la configuration en rechargeant (pg_ctl reload
) ou en redémarrant (sudo service postgresql restart
).* Le fichier
pg_hba.conf
sera probablement à/etc/postgresql/9.x/main/pg_hba.conf
Modifié: Remarques de @Chloe, @JavierEH, @Jonas Eicher, @fccoelho, @Joanis, @Uphill_What commentaires incorporés dans la réponse.
la source
peer
ANDmd5
? Lorsque jemd5
me connecte, je ne peux plus me connecter avec l'postgres
utilisateur! J'ai essayé d'ajouter plusieurs lignes et de séparer la méthode par des virgules, mais cela n'a pas fonctionné. Ok j'ai trouvémgoldwasser
la réponse et ça a marché. Je viens d'ajouter une autre ligne pour l'utilisateurpostgres
avec la méthodepeer
!/var/lib/pgsql/9.4/data/pg_hba.conf
L'authentification par les pairs signifie que postgres demande au système d'exploitation votre nom de connexion et l'utilise pour l'authentification. Pour vous connecter en tant qu'utilisateur "dev" à l'aide de l'authentification par les pairs sur postgres, vous devez également être l'utilisateur "dev" sur le système d'exploitation.
Vous pouvez trouver des détails sur les méthodes d'authentification dans la documentation Postgresql .
Astuce: si aucune méthode d'authentification ne fonctionne plus, déconnectez le serveur du réseau et utilisez la méthode "trust" pour "localhost" (et vérifiez que votre serveur n'est pas accessible via le réseau alors que la méthode "trust" est activée).
la source
dev
d'utilisateur en systèmeXXX
Lorsque vous spécifiez:
il se connecte via UNIX Socket, qui utilise par défaut l'
peer
authentification, saufpg_hba.conf
indication contraire.Vous pouvez spécifier:
pour obtenir une connexion TCP / IP sur l'interface de bouclage (IPv4 et IPv6) pour spécifié
database
etuser
.Après les modifications, vous devez redémarrer postgres ou recharger sa configuration. Redémarrez qui devrait fonctionner dans les distributions modernes basées sur RHEL / Debian:
Le rechargement devrait fonctionner de la manière suivante:
mais la commande peut différer en fonction de la configuration de PATH - vous devrez peut-être spécifier un chemin absolu, qui peut être différent, selon la façon dont le postgres a été installé.
Ensuite, vous pouvez utiliser:
pour vous connecter avec celui
user
spécifiédatabase
sur TCP / IP.md5
signifie mot de passe crypté, tandis que vous pouvez également spécifierpassword
des mots de passe en texte brut lors de l'autorisation. Ces 2 options ne devraient pas être d'une grande importance tant que le serveur de base de données n'est accessible que localement, sans accès au réseau.Remarque importante: ordre de définition en la
pg_hba.conf
matière - les règles sont lues de haut en bas, comme iptables, donc vous voudrez probablement ajouter des règles proposées au-dessus de la règle:la source
Bien que la réponse de @ flaviodesousa fonctionne, elle oblige également tous les utilisateurs (tous les autres) à entrer un mot de passe.
Parfois, il est logique de conserver l'authentification par les pairs pour tout le monde, mais faites une exception pour un utilisateur de service. Dans ce cas, vous voudriez ajouter une ligne au pg_hba.conf qui ressemble à:
Je vous recommande d'ajouter cette ligne juste en dessous de la ligne d'en-tête commentée:
Vous devrez redémarrer PostgreSQL en utilisant
Si vous utilisez 9.3, votre pg_hba.conf serait très probablement:
la source
Cela fonctionne pour moi quand je le rencontre:
la source
dev
.La solution la plus simple:
la source
Je devais simplement ajouter
-h localhost
la source
Dans mon cas, j'utilisais un port différent. La valeur par défaut est 5432. J'utilisais 5433. Cela a fonctionné pour moi:
la source
Pour les personnes à l'avenir voyant cela,
postgres
est dans le/usr/lib/postgresql/10/bin
sur mon serveur Ubuntu.Je l'ai ajouté au PATH dans mon fichier .bashrc, et j'ai ajouté cette ligne à la fin
puis sur la ligne de commande
J'ai rafraîchi mon environnement bash. Maintenant, je peux utiliser à
postgres -D /wherever
partir de n'importe quel répertoirela source
pg_dump -h localhost -U postgres -F c -b -v -f mydb.backup mydb
la source
-U postgres
être pivot? Quelles sont toutes ces lettres de tiret , de toute façon?Essayer:
psql -U nom_rôle -d base de données -h nomhôte..com -W
la source