FOUT FOUT: Peer-authenticatie is mislukt voor gebruiker “Postgres”, wanneer u probeert PGSQL te laten werken met rails

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.confbestand *.

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.confMOET HELPEN; Hier is enkele voorbeelden: /etc/postgresql/*/main/pg_hba.confEN /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.

  1. open het bestand pg_hba.confvoor Ubuntu, het staat in /etc/postgresql/9.x/mainen verander deze regel:

    lokaal all postgres peer

    naar

    lokaal all postgres trust
  2. Start de server opnieuw

    $ sudo service postgresql restart
    
  3. Inloggen in PSQL en stel uw wachtwoord

    in

    $ psql -U postgres
    db> ALTER USER postgres with password 'your-pass';
    
  4. Wijzig uiteindelijk de pg_hba.confvan

    Lokaal 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.confvinden. 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%

  1. 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
  1. 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
  1. 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=localhostin 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.confte 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 postgresaan en logt er vervolgens in. Probeer nu je psql-opdracht opnieuw.

Je kunt ook een postgresgebruiker 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.confzijn 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 $PGDATAte 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.shzodat 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 Iom te bewerken/invoegen, druk 3 keer op ESCen typ :wqom 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

Other episodes