PostgreSQL: alterar a senha de um usuário não está funcionando

9
  • Eu instalei PostgreSQLna EC2máquina e agora quero alterar a senha do usuáriopostgres
  • eu faço
$ sudo -u postgres psql
psql (9.1.5)
Type "help" for help.

postgres=# ALTER USER postgres WITH PASSWORD 'newpasswd';
ALTER ROLE
  • Então eu saio do shell e tento entrar com a nova senha
$ psql -U postgres -W
Password for user postgres: 
psql: FATAL:  Peer authentication failed for user "postgres"

Minha PostgreSQLversão é

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

O que estou fazendo de errado?

Obrigado

ATUALIZAÇÃO Fiz alterações pg_hba.confe é assim que parece agora

# 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

Então eu reiniciei o postgres

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

Tentei fazer login novamente, mas falhei

$ psql -U postgres -W
Password for user postgres: 
psql: FATAL:  Peer authentication failed for user "postgres"
sonhador
fonte
Provavelmente a senha antiga ainda está armazenada no seu arquivo ~ / .pgpass.
Nah, há um prompt de senha lá. Eu estou pensando que o pg_hba.confé configurado de tal forma que não está aceitando autenticação de senha.
@willglynn, por favor, verifique o meu update, ele está falhando novamente, mesmo depois de fazer alterações nopg_hba.conf
daydreamer

Respostas:

9

Como willglynn disse, provavelmente é o seu arquivo pg_hba.conf.

Se você possui a seguinte linha:

local   all    all     peer

então mude para:

local   all    all     md5

Isso deve permitir que você faça login com sua nova senha (supondo que você a forneça corretamente) :)

David S
fonte
Oi @ David, eu tentei como você mencionou, mas ainda falhar, por favor, verifique o meu update como o que eu fiz, obrigado
daydreamer
Ainda há uma peerlinha que se aplica às conexões locais (soquetes de domínio UNIX) do postgresusuário. Isso falhará, a menos que o outro extremo esteja sendo executado como postgresusuário do SO . Veja a documentação do pg_hba.conf para uma melhor compreensão.
Embora eu era capaz de correr django manage.py syncdb, eu ainda vai ler sobre pg_hba.confdocumentação que você mencionou, muito obrigado pela sua ajuda
daydreamer
Eu só precisava para adicionar-h localhost
Mike
5

Eu só queria adicionar isso, além de alterar o pg_hba.confarquivo de

local   all    all     peer

para

local   all    all     md5

De acordo com a resposta aceita, a única maneira de entrar depois de fazer o mesmo que o OP estava fazendo era passar a -hbandeira ao tentar fazer login.

$ psql -U postgres -h localhost

Felizmente, isso ajudará alguém no futuro. Isso estava me deixando louco!

JTG
fonte
0

Você tem isto...

# 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

mudar por isso:

# 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 reinicie o serviço postgresql

sudo /etc/init.d/posgresql restart

esse trabalho pra mim

Israel L Rosas
fonte
Ao mudar, pg_hba.confvocê não precisa reiniciar o Postgres. Recarregar a configuração é suficiente. por exemplo, pg_ctl ... reloadouselect pg_reload_conf()
a_horse_with_no_name 8/17
Recarga só ... eu não sei ... graças
Israel L Rosas
-1

Para as pessoas que estão enlouquecendo depois de alterar a senha várias vezes e tentar tudo mencionado aqui, lembre-se de verificar a validade do usuário. Você pode configurá-lo para 'nunca expirar' assim no psql 9.x:

ALTER ROLE <username> VALID UNTIL 'infinity';
kirpit
fonte