PostgreSQL: la modifica della password per un utente non funziona


9
  • Ho installato PostgreSQLsulla EC2macchina e ora voglio cambiare la password dell'utentepostgres
  • lo voglio
$ sudo -u postgres psql
psql (9.1.5)
Type "help" for help.

postgres=# ALTER USER postgres WITH PASSWORD 'newpasswd';
ALTER ROLE
  • Quindi esco dalla shell e provo ad accedere con una nuova password
$ psql -U postgres -W
Password for user postgres: 
psql: FATAL:  Peer authentication failed for user "postgres"

La mia PostgreSQLversione è

$ psql --version
psql (PostgreSQL) 9.1.5
contains support for command-line editing

Che cosa sto facendo di sbagliato?

Grazie

AGGIORNAMENTO Ho apportato modifiche pg_hba.confe questo è come appare ora

# Database administrative login by Unix domain socket
local   all             postgres                                peer

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
#local   all             all                                     peer
local   all             all                                     md5
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5

Quindi ho riavviato il postgres

$ sudo /etc/init.d/postgresql restart
 * Restarting PostgreSQL 9.1 database server                                                                                                                                               [ OK ] 

Ho provato ad accedere nuovamente, ma non ci sono riuscito

$ psql -U postgres -W
Password for user postgres: 
psql: FATAL:  Peer authentication failed for user "postgres"

Probabilmente la vecchia password è ancora memorizzata nel tuo file ~ / .pgpass.

No, c'è una richiesta di password lì. Sto pensando che pg_hba.confsia impostato in modo tale da non accettare l'autenticazione con password.

@willglynn, per favore controlla il mio aggiornamento, non riesce ancora dopo aver apportato modifichepg_hba.conf
daydreamer

Risposte:


9

Come ha detto Willglynn, probabilmente è il tuo file pg_hba.conf.

Se hai la seguente riga:

local   all    all     peer

quindi cambiarlo in:

local   all    all     md5

Ciò dovrebbe quindi consentire l'accesso con la nuova password (presupponendo che sia stata fornita correttamente) :)


Ciao @David, ho provato come hai detto, ma continua a fallire, per favore controlla il mio aggiornamento come ho fatto, grazie
sognatore ad occhi aperti

C'è ancora una peerlinea che si applica alle connessioni locali (socket di dominio UNIX) da parte postgresdell'utente. Ciò fallirà a meno che l'estremità remota non sia in esecuzione come postgresutente del sistema operativo . Vedere la documentazione di pg_hba.conf per una migliore comprensione.

Anche se sono stato in grado di correre django manage.py syncdb, continuerò a leggere sulla pg_hba.confdocumentazione che hai menzionato, grazie mille per il tuo aiuto
sognatore ad occhi aperti

Ho solo bisogno di aggiungere-h localhost
Mike,

5

Volevo solo aggiungere questo oltre a cambiare il pg_hba.conffile da

local   all    all     peer

per

local   all    all     md5

Secondo la risposta accettata, l'unico modo in cui potevo accedere dopo aver fatto la stessa cosa che stava facendo l'OP era passare la -hbandiera quando provavo ad accedere.

$ psql -U postgres -h localhost

Spero che questo possa aiutare qualcuno in futuro. Mi stava facendo impazzire!


0

Tu hai questo...

# Database administrative login by Unix domain socket
local   all             postgres                                peer

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
#local   all             all                                     peer
local   all             all                                     md5

cambia con questo:

# Database administrative login by Unix domain socket
local   all             postgres                                md5

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     peer
#local   all             all                                     md5

e riavvia il servizio postgresql di

sudo /etc/init.d/posgresql restart

questo lavoro per me


Quando si cambia pg_hba.confnon è necessario riavviare Postgres. Ricaricare la configurazione è sufficiente. ad es. pg_ctl ... reloadoppureselect pg_reload_conf()
a_horse_with_no_name

Ricarica solo ... non lo sapevo ... grazie
Israel L Rosas

-1

Per la gente, che sta impazzendo dopo aver cambiato la password molte volte e aver provato tutto quanto menzionato qui, ricordarsi di controllare la scadenza della validità dell'utente. Puoi impostarlo su "non scadere mai" come quello in psql 9.x:

ALTER ROLE <username> VALID UNTIL 'infinity';

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.