Ottenere errore: l’autenticazione peer non è riuscita per l’utente “postgres”, quando si cerca di ottenere pgsql che funziona con le rotaie

Sto ottenendo

FATAL: Peer authentication failed for user "postgres" 

quando provo a far funzionare postgres con Rails.

Ecco il mio pg_hba.conf , il mio database.yml e un dump della traccia completa .

Ho cambiato l’autenticazione in md5 in pg_hba e ho provato diverse cose, ma nessuna sembra funzionare.

Ho anche provato a creare un nuovo utente e database come da Rails 3.2, FATAL: autenticazione peer non riuscita per l’utente (PG :: Errore)

Ma non si visualizzano su pgadmin o anche quando eseguo sudo -u postgres psql -l

Qualche idea su dove sto andando male?

Il problema è ancora il tuo file pg_hba.conf (/etc/postgresql/9.1/main/pg_hba.conf*). Questa linea:

 local all postgres peer 

Dovrebbe essere

 local all postgres md5 

* Se non riesci a trovare questo file, l’esecuzione di locate pg_hba.conf dovrebbe mostrarti dove si trova il file.

Dopo aver modificato questo file, non dimenticare di riavviare il tuo server PostgreSQL. Se sei su Linux, sarebbe il sudo service postgresql restart .

Queste sono brevi descrizioni di entrambe le opzioni in base ai documenti PostgreSQL ufficiali sui metodi di autenticazione .

Autenticazione peer

Il metodo di autenticazione peer funziona ottenendo il nome utente del sistema operativo del client dal kernel e utilizzandolo come nome utente del database consentito (con mapping facoltativa del nome utente). Questo metodo è supportato solo su connessioni locali.

Autenticazione della password

I metodi di autenticazione basati su password sono md5 e password. Questi metodi funzionano in modo simile, tranne per il modo in cui la password viene inviata attraverso la connessione, ovvero MD5-hash e clear-text, rispettivamente.

Se sei preoccupato per gli attacchi di “sniffing” della password, allora è preferito md5. La password semplice dovrebbe sempre essere evitata se ansible. Tuttavia, md5 non può essere utilizzato con la funzione db_user_namespace. Se la connessione è protetta dalla crittografia SSL, la password può essere utilizzata in modo sicuro (sebbene l’autenticazione con certificato SSL potrebbe essere una scelta migliore se si dipende dall’utilizzo di SSL).

pg_hba.conf esempio per pg_hba.conf

/etc/postgresql/9.1/main/pg_hba.conf

Dopo aver installato Postgresql ho fatto i seguenti passaggi.

  1. apri il file pg_hba.conf per Ubuntu che sarà in /etc/postgresql/9.x/main e cambia questa riga:
  locale tutto postgres pari 

a

  la fiducia di tutti i postgres locali 
  1. Riavvia il server
 sudo service postgresql restart 
  1. Accedi a psql e imposta la tua password

psql -U postgres

 ALTER USER postgres with password 'your-pass'; 
  1. Infine cambia il pg_hba.conf da
  la fiducia di tutti i postgres locali 

a

  local all postgres md5 

Dopo aver riavviato il server postgresql, è ansible accedervi con la propria password

Dettagli dei metodi di autenticazione:

fiducia – chiunque sia in grado di connettersi al server è autorizzato ad accedere al database

peer – usa il nome utente del sistema operativo del client come nome utente del database per accedervi.

md5 – autenticazione password-base

per ulteriori controlli di riferimento qui

Se ti connetti su localhost (127.0.0.1) non dovresti provare questo particolare problema. Non vorrei molto scherzare con il file pg_hba.conf ma dovrei invece regolare la stringa di connessione:

 psql -U someuser -h 127.0.0.1 database 

dove someuser è il tuo utente che stai connettendo e database è il database a cui l’utente ha il permesso di connettersi.

Ecco cosa faccio su Debian per configurare postgres:

 http://www.postgresql.org/download/linux/debian/ (Wheezy 7.x) as root … [email protected]:~# echo "deb http://apt.postgresql.org/pub/repos/apt/ wheezy-pgdg main" >> /etc/apt/sources.list [email protected]:~# wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add - [email protected]:~# apt-get update [email protected]:~# apt-get install postgresql-9.4 [email protected]:~# su - postgres [email protected]:~$ 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 [email protected]:~$ createdb -O someuser database [email protected]:~$ psql -U someuser -h 127.0.0.1 database 

Godere!

Questo ha funzionato per me !!

 sudo -u postgres psql 
  1. Vai a questo /etc/postgresql/9.x/main/ e apri il file pg_hba.conf

Nel mio caso:

 $> sudo nano /etc/postgresql/9.3/main/pg_hba.conf 
  1. Sostituisci peer con md5

Quindi questo sarà cambiato in:

Accesso amministrativo al database tramite socket di dominio Unix locale tutto 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 

Questo:

Accesso amministrativo al database tramite socket di dominio Unix locale all 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. Quindi riavviare il server pg:

    $> sudo service postgresql restart

Di seguito è riportato l’elenco dei METODI utilizzati per connettersi con 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. 

Nota: se non hai ancora creato l’utente di postgres. Crealo e ora puoi accedere al server Postgres usando le credenziali dell’utente.

Se hai problemi, devi localizzare il tuo pg_hba.conf

find / -name 'pg_hba.conf' 2>/dev/null

e cambia il file di configurazione:

Postgresql 9.3

Postgresql 9.3

Postgresql 9.4

Postgresql 9.3

Dopodiché è necessario riavviare il servizio postgresql

Esempio per postgresql 9.3

service postgresql-9.3 restart

In caso di problemi, è necessario impostare nuovamente la password:

ALTER USER db_user with password 'db_password';

Ho avuto lo stesso problema.

La soluzione di Depa è assolutamente corretta.

Assicurati di avere un utente configurato per usare PostgreSQL.

Controlla il file:

 $ ls /etc/postgresql/9.1/main/pg_hba.conf -l 

Il permesso di questo file deve essere dato all’utente con cui è stato registrato il tuo psql.

Ulteriore. Se sei buono fino ad ora ..

Aggiorna secondo le istruzioni di @ depa.

vale a dire

 $ sudo nano /etc/postgresql/9.1/main/pg_hba.conf 

e quindi apportare modifiche.

Le modifiche sopra hanno funzionato per me, dopo aver capito che avevo bisogno di riavviare il server Postgres dopo averli creati. Per ubuntu:

 sudo /etc/init.d/postgresql restart 

Se si desidera mantenere la configurazione predefinita ma si desidera l’autenticazione md5 con connessione socket per una specifica connessione utente / db, aggiungere una riga “locale” PRIMA della linea “locale tutto / tutto”:

 # TYPE DATABASE USER ADDRESS METHOD # "local" is for Unix domain socket connections only local username dbname 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 

Stavo spostando la directory dei dati su un server clonato e avendo problemi ad accedere come postgres. La reimpostazione della password di Postgres ha funzionato per me.

root# su postgres postgres$ psql -U postgres psql (9.3.6) Type "help" for help. postgres=#\password Enter new password: Enter it again: postgres=#

Usa host=localhost in connessione.

 PGconn *conn = PQconnectdb( "host=localhost user=postgres dbname=postgres password=123" ); 

Cambiare il peer METHOD per fidarsi di pg_hba.conf (/etc/postgresql/9.1/main/pg_hba.conf | line 85) risolve il problema. L’aggiunta di md5 richiede una password, quindi se c’è un obbligo di evitare l’uso di password, usa trust invece di md5 .

il seguente comando funziona per me:

 psql -d myDb -U username -W 

Devi solo impostare METHOD per fidarti.

 #TYPE DATABASE USER ADDRESS METHOD local all all trust 

E ricaricare il server Postgres.

 # service postgresql-9.5 reload 

Le modifiche in pg_hba.conf non richiedono il server postgres RESTART. solo RELOAD.

Molte delle altre risposte riguardano le impostazioni nei vari file di configurazione, e quelle relative al pg_hba.conf si applicano e sono corrette al 100%. Tuttavia, assicurati di modificare i file di configurazione corretti .

Come altri hanno menzionato, le posizioni dei file di configurazione possono essere sovrascritte con varie impostazioni all’interno del file di configurazione principale, oltre a fornire un percorso al file di configurazione principale sulla riga di comando con l’opzione -D .

È ansible utilizzare il seguente comando durante una sessione di psql per mostrare dove vengono letti i file di configurazione (presupponendo di poter avviare psql). Questo è solo un passaggio per la risoluzione dei problemi che può aiutare alcune persone:

 select * from pg_settings where setting~'pgsql'; 

Dovresti anche assicurarti che la directory home dell’utente postgres sia dove ti aspetti che sia. Dico questo perché è abbastanza facile trascurare questo perché il tuo prompt mostrerà ‘ ~ ‘ invece del percorso attuale della tua home directory, rendendolo non così ovvio. Molte installazioni predefiniscono la directory home dell’utente postgres in /var/lib/pgsql .

Se non è impostato su cosa dovrebbe essere, interrompere il servizio postgresql e utilizzare il seguente comando mentre si è connessi come root. Assicurati inoltre che l’utente postgres non abbia effettuato l’accesso a un’altra sessione:

 usermod -d /path/pgsql postgres 

Infine assicurati che la tua variabile PGDATA sia impostata correttamente digitando echo $PGDATA , che dovrebbe produrre qualcosa di simile a:

 /path/pgsql/data 

Se non è impostato, o mostra qualcosa di diverso da quello che ti aspetti che sia, esamina i tuoi file di avvio o RC come .profile o .bash.rc – questo varierà molto a seconda del tuo sistema operativo e della tua shell. Una volta determinato lo script di avvio corretto per la macchina, è ansible inserire quanto segue:

 export PGDATA=/path/pgsql/data 

Per il mio sistema, l’ho inserito in /etc/profile.d/profile.local.sh modo che fosse accessibile a tutti gli utenti.

Ora dovresti essere in grado di avviare il database come al solito e tutte le impostazioni del tuo percorso psql dovrebbero essere corrette!

Il mio problema era che non ho scritto alcun server. Ho pensato che fosse un valore predefinito a causa del segnaposto ma quando ho digitato localhost ha funzionato.

Se stai cercando di trovare questo file in Cloud 9, puoi farlo

 sudo vim /var/lib/pgsql9/data/pg_hba.conf 

Premere I per modificare / inserire, premere ESC 3 volte e digitare :wq salverà il file e uscirà

Se stai affrontando questo problema con i binari e sai che hai già creato quel nome utente con password insieme ai diritti corretti, devi solo inserire il seguente file alla fine del tuo file database.yml.

 host: localhost 

il file generale apparirà di seguito

 development: adapter: postgresql encoding: unicode database: myapp_development pool: 5 username: root password: admin host: localhost 

Non è necessario toccare il tuo file pg_hba.conf . Buona programmazione