Ik krijg de foutmelding:
FATAL: Peer authentication failed for user "postgres"
Wanneer ik postgres probeer met rails te maken.
Hier is mijn pg_hba.conf
, mijn database.yml
, en een Dump van de volledige trace .
Ik veranderde authenticatie naar MD5 in PG_HBA en probeerde verschillende dingen, maar niemand lijkt te werken.
Ik heb ook geprobeerd een nieuwe gebruiker en database te maken volgens Rails 3.2, Fatal: Peer-authenticatie mislukt voor gebruiker (PG :: Fout)
Maar ze verschijnen niet op PGADMIN of zelfs wanneer ik ondervind sudo -u postgres psql -l
.
Enig idee waar ik fout ga?
Antwoord 1, Autoriteit 100%
Het probleem is nog steeds uw pg_hba.conf
bestand *.
Deze regel:
local all postgres peer
zou moeten zijn:
local all postgres md5
* De locatie van dit bestand is niet erg consistent. De opdracht
locate pg_hba.conf
MOET HELPEN; Hier is enkele voorbeelden:/etc/postgresql/*/main/pg_hba.conf
EN/var/lib/pgsql/data/pg_hba.conf
.
Vergeet niet na het wijzigen van dit bestand uw PostgreSQL-server opnieuw op te starten. Als je Linux gebruikt, is dat sudo service postgresql restart
.
Dit zijn korte beschrijvingen van beide opties volgens de officiële PostgreSQL-documenten op authenticatiemethoden.
Peer-authenticatie
De peer-authenticatiemethode werkt door het verkrijgen van de
gebruikersnaam van het besturingssysteem uit de kernel en gebruik deze als de toegestane
gebruikersnaam van de database (met optionele toewijzing van gebruikersnaam). Deze methode is
alleen ondersteund op lokale verbindingen.
Wachtwoordverificatie
De op wachtwoord gebaseerde verificatiemethoden zijn md5 en wachtwoord. Deze
methoden werken op dezelfde manier, behalve de manier waarop het wachtwoord wordt verzonden
over de verbinding, namelijk respectievelijk MD5-hash en clear-text.Als je je zorgen maakt over “sniffing”-aanvallen met wachtwoorden, dan md5
heeft de voorkeur. Gewoon wachtwoord moet altijd worden vermeden, indien mogelijk.
md5 kan echter niet worden gebruikt met de functie db_user_namespace. Als de
verbinding wordt beschermd door SSL-codering, dan kan het wachtwoord worden gebruikt
veilig (hoewel SSL-certificaatverificatie misschien een betere keuze is)
als er een afhankelijk is van het gebruik van SSL).
Voorbeeldlocatie voor pg_hba.conf
:
/etc/postgresql/9.1/main/pg_hba.conf
Antwoord 2, autoriteit 40%
Na het installeren van Postgresql heb ik de onderstaande stappen uitgevoerd.
-
open het bestand
pg_hba.conf
voor Ubuntu, het staat in/etc/postgresql/9.x/main
en verander deze regel:lokaal all postgres peer
naar
lokaal all postgres trust
-
Start de server opnieuw
$ sudo service postgresql restart
-
Inloggen in PSQL en stel uw wachtwoord
in
$ psql -U postgres db> ALTER USER postgres with password 'your-pass';
-
Wijzig uiteindelijk de
pg_hba.conf
vanLokaal alle PostGres Trust
Naar
Lokaal Alle PostGres MD5
Na het opnieuw opzenden van de PostgreSQL-server, kunt u deze toegang krijgen met uw eigen wachtwoord
Details van de authenticatiemethoden:
Trust – Iedereen die verbinding kan maken met de server is gemachtigd om toegang te krijgen tot de database
Peer – Gebruik de gebruikersnaam van de clientsysteem als database gebruikersnaam om er toegang toe te hebben.
MD5 – Password-base-authenticatie
Voor verdere referentie controleer hier
Antwoord 3, Autoriteit 22%
Als u verbinding maakt via localhost (127.0.0.1), moet u dat specifieke probleem niet ervaren. Ik zou niet veel moppen met de PG_HBA.CONF, maar in plaats daarvan zou ik uw verbindingsreeks aanpassen:
psql -U someuser -h 127.0.0.1 database
Waar iemands uw gebruiker is die u aansluit en database is de database waarmee uw gebruiker toestemming heeft om verbinding mee te maken.
Hier is wat ik doe op Debian om PostGres in te stellen:
http://www.postgresql.org/download/linux/debian/ (Wheezy 7.x)
as root …
root@www0:~# echo "deb http://apt.postgresql.org/pub/repos/apt/ wheezy-pgdg main" >> /etc/apt/sources.list
root@www0:~# wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -
root@www0:~# apt-get update
root@www0:~# apt-get install postgresql-9.4
root@www0:~# su - postgres
postgres@www0:~$ createuser --interactive -P someuser
Enter password for new role:
Enter it again:
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) n
postgres@www0:~$ createdb -O someuser database
postgres@www0:~$ psql -U someuser -h 127.0.0.1 database
Veel plezier!
Antwoord 4, autoriteit 7%
Dit heeft voor mij gewerkt !!
sudo -u postgres psql
Antwoord 5, autoriteit 2%
sudo psql --host=localhost --dbname=database-name --username=postgres
Dit heeft mijn probleem opgelost
Antwoord 6, autoriteit 2%
Als je een probleem hebt, moet je je pg_hba.conf
vinden. De opdracht is:
find / -name 'pg_hba.conf' 2>/dev/null
en verander daarna het configuratiebestand:
Postgresql 9.3
Postgresql 9.4
De volgende stap is: Uw db-instantie opnieuw opstarten:
service postgresql-9.3 restart
Als je problemen hebt, moet je het wachtwoord opnieuw instellen:
ALTER USER db_user with password 'db_password';
Antwoord 7, autoriteit 2%
- Ga naar dit /etc/postgresql/9.x/main/en open pg_hba.confbestand
In mijn geval:
$> sudo nano /etc/postgresql/9.3/main/pg_hba.conf
- Vervang peerdoor md5
Dit wordt dus gewijzigd in:
Administratieve aanmelding bij database via Unix-domeinsocket
lokaal alle postgres-peer
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all peer
# IPv4 local connections:
host all all 127.0.0.1/32 md5
Dit:
Administratieve aanmelding bij database via Unix-domeinsocket
lokaal alle postgres md5
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all md5
# IPv4 local connections:
host all all 127.0.0.1/32 md5
-
Herstart vervolgens pg-server:
$> sudo-service postgresql opnieuw opstarten
Hieronder staat een lijst met METHODEN die worden gebruikt om verbinding te maken met postgres:
# METHOD can be "trust", "reject", "md5", "password", "gss", "sspi",
# "krb5", "ident", "peer", "pam", "ldap", "radius" or "cert". Note that
# "password" sends passwords in clear text; "md5" is preferred since
# it sends encrypted passwords.
Opmerking:als u uw postgres-gebruiker nog niet heeft aangemaakt. Maak dat aan en nu heb je toegang tot de postgres-server met die gebruikersreferenties.
TIP:Als het niet werkt nadat postgres opnieuw is opgestart, sluit dan terminal en open opnieuw.
Antwoord 8
Eenvoudigste oplossing zonder configuraties te wijzigen. (ubuntu)
Verander gebruiker, maak dan verbinding met database cli.
sudo -i -u postgres
psql
overgenomen van https://www.digitalocean.com/community/tutorials/how-to-install-and-use-postgresql-on-ubuntu-18-04
Antwoord 9
Ik had hetzelfde probleem.
De oplossing van depa is absoluut correct.
Zorg er wel voor dat je een gebruiker hebt geconfigureerd om PostgreSQL te gebruiken.
Controleer het bestand:
$ ls /etc/postgresql/9.1/main/pg_hba.conf -l
De toestemming voor dit bestand moet worden gegeven aan de gebruiker bij wie je je psql hebt geregistreerd.
Verder. Als je tot nu toe goed bent..
Bijwerken volgens de instructies van @depa.
d.w.z.
$ sudo nano /etc/postgresql/9.1/main/pg_hba.conf
en breng vervolgens wijzigingen aan.
Antwoord 10
Ik was de gegevensmap op een gekloonde server aan het verplaatsen en had problemen om in te loggen als postgres. Het op deze manier resetten van het postgres-wachtwoord werkte voor mij.
root# su postgres
postgres$ psql -U postgres
psql (9.3.6)
Type "help" for help.
postgres=#\password
Enter new password:
Enter it again:
postgres=#
Antwoord 11
Als u de standaardconfiguratie wilt behouden maar md5-authenticatie wilt met socketverbinding voor één specifieke gebruiker/db-verbinding, voeg dan een “lokale” regel toe VOOR de “lokale alles/alles” regel:
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local dbname username md5 # <-- this line
local all all peer
# IPv4 local connections:
host all all 127.0.0.1/32 ident
# IPv6 local connections:
host all all ::1/128 ident
Antwoord 12
De bovenstaande bewerkingen werkten voor mij, nadat ik erachter kwam dat ik de postgres-server opnieuw moest opstarten nadat ik ze had gemaakt.
Voor ubuntu:
sudo /etc/init.d/postgresql restart
Antwoord 13
Wijzigen van METHODE peernaar vertrouwenin pg_hba.conf (/etc/postgresql/9.1/main/pg_hba.conf | regel 85) lost het probleem op. Bij het toevoegen van md5 wordt om een wachtwoord gevraagd, dus als er een vereiste is om het gebruik van wachtwoorden te vermijden, gebruik dan vertrouwenin plaats van md5.
Antwoord 14
Gebruik host=localhost
in verbinding.
PGconn *conn = PQconnectdb(
"host=localhost user=postgres dbname=postgres password=123"
);
Antwoord 15
het onderstaande commando werkt voor mij:
psql -d myDb -U username -W
Antwoord 16
U hebt gewoon de methode ingesteld om te vertrouwen.
#TYPE DATABASE USER ADDRESS METHOD
local all all trust
en herladen PostGres-server.
# service postgresql-9.5 reload
Wijzigingen in PG_HBA.Conf vereisen geen herstart postgres-server. Gewoon opnieuw laden.
Antwoord 17
Volg de onderstaande stappen
1). Navigeer eerst naar de / etc / postgreSQL / {Your PG-versie} / hoofddirectory.
Mijn versie is dan 10:
cd /etc/postgresql/10/main
2). Hier verblijft het PG_HBA.CONF-bestand moet hier enkele wijzigingen aanbieden die u nodig heeft
sudo-toegang hiervoor.
sudo nano pg_hba.conf
3). Blader door het bestand totdat u dit vindt –
# Database administrative login by Unix domain socket
local all postgres peer
4). Verander hier de peer tot MD5 als volgt.
# Database administrative login by Unix domain socket
local all all md5
-
Peer betekent dat het de authenticiteit van Unix-gebruiker zal vertrouwen, daarom niet
-
Prompt voor het wachtwoord. MD5 betekent dat het altijd om een wachtwoord zal vragen,
en valideer het na hashing met MD5.
5) Sla het bestand op en start de PostGres-server opnieuw op.
sudo service postgresql restart
Nu zou het goed moeten zijn.
Antwoord 18
pg_config is voor compliation-informatie, om extensies en clientprogramma’s te helpen compileren en koppelen tegen PostgreSQL. Het weet niets van de actieve PostgreSQL-instantie (en) op de machine, alleen de binaries.
pg_hba.conf kan op vele andere plaatsen verschijnen, afhankelijk van hoe PG is geïnstalleerd. De standaardlocatie is PG_HBA.Conf binnen de Data_Directory van de database (die in / home, / var / lib / pgsql, / var / lib / postgresql / [versie] /, / opt / postgres /, etc etc enz.) Kan zijn Maar gebruikers en verpakkingen kunnen het waar ze willen. Helaas.
De enige geldige manieren vinden PG_HBA.CONF is om een lopende postgresql-instantie te vragen waar het PG_HBA.CONF is, of vraag het SYSADMIN waar het is. Je kunt niet eens vertrouwen op het vragen waar de datadir is en postgresql.conf is, omdat een init-script een param is als -c-hba_file = / wat / ander / pad bij het starten van PG.
Wat u wilt doen, is Ask Gresql:
SHOW hba_file;
Met deze opdracht moet worden uitgevoerd op een superuser-sessie, dus voor Shell Scripting kunt u iets schrijven als:
psql -t -P format=unaligned -c 'show hba_file';
en stel de omgeving Variabelen PGUSER, PGDATABASE, enz. Stel om ervoor te zorgen dat de verbinding goed is.
Ja, dit is enigszins van een kip-en-eimrobleem, in dat als de gebruiker geen verbinding kan maken (zeg na het verwijderen van pg_hba.conf), kunt u PG_HBA.Conf niet vinden om het te repareren .
Een andere optie is om de uitvoer van de PS-opdracht te bekijken en te kijken of het postmastergegevensdirectory-argument daar zichtbaar is, b.g
ps aux | grep 'postgres *-D'
aangezien pg_hba.conf zich in de datadirectory bevindt (tenzij u Debian/Ubuntu of een afgeleide gebruikt en hun pakketten gebruikt).
Als u zich specifiek richt op Ubuntu-systemen waarop PostgreSQL is geïnstalleerd vanuit Debian/Ubuntu-pakketten, wordt het een beetje eenvoudiger. U hoeft niet te maken te hebben met met de hand gecompileerde-van-bron-Pg waarvoor iemand een datadir heeft geïnitieerd in hun thuismap, of een EnterpriseDB Pg-installatie in /opt, enz. U kunt pg_wrapper vragen, de Debian/Ubuntu multi -version Pg manager, waarbij PostgreSQL de opdracht pg_lsclusters van pg_wrapper gebruikt.
Als je geen verbinding kunt maken (Pg is niet actief, of je moet pg_hba.conf bewerken om verbinding te maken), moet je op het systeem zoeken naar pg_hba.conf-bestanden. Op Mac en Linux is iets als sudo find / -type f -name pg_hba.conf voldoende. Controleer vervolgens het PG_VERSION-bestand in dezelfde map om er zeker van te zijn dat het de juiste PostgreSQL-versie is als u er meer dan één hebt. (Als pg_hba.conf in /etc/ staat, negeer dit, het is in plaats daarvan de naam van de bovenliggende map). Als je meer dan één datadirectory hebt voor dezelfde PostgreSQL-versie, moet je kijken naar de databasegrootte, controleer de opdrachtregel van de actieve postgres van ps om te zien of het argument datadirectory -D overeenkomt met waar je aan het bewerken bent, enz. .
https:// askubuntu.com/questions/256534/how-do-i-find-the-path-to-pg-hba-conf-from-the-shell/256711
Antwoord 19
De meeste oplossingen zijn voorstellen om de pg_hba.conf
te bewerken.
Voor u die het configuratiebestand niet wilt bewerken, hoeft u zich in principe alleen maar aan te melden bij de postgres
-gebruiker. Als u/in Linux-server gebruikt, gebruik dan deze opdracht
sudo -i -u postgres
Het maakt gebruiker postgres
aan en logt er vervolgens in. Probeer nu je psql-opdracht opnieuw.
Je kunt ook een postgres
gebruiker een wachtwoord toevoegen met het commando: (je zou in root gebruiker moeten zijn)
passwd postgres
Dit werkt omdat volgens deze documentatie van PostgreSQL,
Peer-authenticatie
De peer-authenticatiemethode werkt door het verkrijgen van de
gebruikersnaam van het besturingssysteem uit de kernel en gebruik deze als de toegestane
gebruikersnaam van de database (met optionele toewijzing van gebruikersnaam). Deze methode is
alleen ondersteund op lokale verbindingen.
Antwoord 20
Veel van de andere antwoorden hebben betrekking op instellingen in de verschillende configuratiebestanden, en die met betrekking tot de pg_hba.conf
zijn wel van toepassing en zijn 100% correct. Zorg er echter voor dat u de juiste configuratiebestanden aanpast.
Zoals anderen al hebben vermeld, kunnen de locaties van het configuratiebestand worden overschreven met verschillende instellingen in het hoofdconfiguratiebestand, evenals het opgeven van een pad naar het hoofdconfiguratiebestand op de opdrachtregel met de optie -D
.
U kunt de volgende opdracht gebruiken terwijl u in een psql-sessie bent om te laten zien waar uw configuratiebestanden worden gelezen (ervan uitgaande dat u psql kunt starten). Dit is slechts een stap voor probleemoplossing die sommige mensen kan helpen:
select * from pg_settings where setting~'pgsql';
Je moet er ook voor zorgen dat de homedirectory van je postgres-gebruiker zich daar bevindt waar je hem verwacht. Ik zeg dit omdat het vrij gemakkelijk is om dit over het hoofd te zien vanwege het feit dat je prompt ‘~
‘ zal weergeven in plaats van het werkelijke pad van je homedirectory, waardoor het niet zo voor de hand liggend is. Bij veel installaties wordt de homedirectory van de postgres-gebruiker standaard ingesteld op /var/lib/pgsql
.
Als het niet is ingesteld op wat het zou moeten zijn, stop dan de postgresql-service en gebruik de volgende opdracht terwijl u bent aangemeld als root. Zorg er ook voor dat de postgres-gebruiker niet is ingelogd bij een andere sessie:
usermod -d /path/pgsql postgres
Zorg er ten slotte voor dat uw PGDATA-variabele correct is ingesteld door echo $PGDATA
te typen, wat iets vergelijkbaars moet opleveren als:
/path/pgsql/data
Als het niet is ingesteld, of iets anders laat zien dan je verwacht, onderzoek dan je opstart- of RC-bestanden zoals .profile of .bash.rc – dit zal sterk variëren, afhankelijk van je besturingssysteem en je shell. Nadat u het juiste opstartscript voor uw machine hebt bepaald, kunt u het volgende invoegen:
export PGDATA=/path/pgsql/data
Voor mijn systeem plaatste ik dit in /etc/profile.d/profile.local.sh
zodat het toegankelijk was voor alle gebruikers.
U zou nu de database zoals gewoonlijk moeten kunnen initiëren en al uw psql-padinstellingen zouden correct moeten zijn!
Antwoord 21
Mijn probleem was dat ik geen enkele server had getypt. Ik dacht dat het een standaard was vanwege de tijdelijke aanduiding, maar toen ik localhost typte, werkte het wel.
Antwoord 22
Als u dit bestand in Cloud 9 probeert te vinden, kunt u dit doen
sudo vim /var/lib/pgsql9/data/pg_hba.conf
Druk op I
om te bewerken/invoegen, druk 3 keer op ESC
en typ :wq
om het bestand op te slaan en af te sluiten
Antwoord 23
Als je met dit probleem wordt geconfronteerd met rails en je weet dat je die gebruikersnaam al hebt aangemaakt met wachtwoord en de juiste rechten, dan hoef je alleen maar het volgende aan het einde van je database.yml-bestand te plaatsen.
host: localhost
algemeen bestand ziet er als volgt uit
development:
adapter: postgresql
encoding: unicode
database: myapp_development
pool: 5
username: root
password: admin
host: localhost
Je hoeft je pg_hba.conf
-bestand helemaal niet aan te raken. Veel plezier met coderen
Antwoord 24
Op CentOS 7, PG 10 is het bestandspad
/var/lib/pgsql/10/data/pg_hba.conf