Postgresql: falha na autenticação da senha para o usuário "postgres"


431

Eu instalei o PostgreSQL 8.4, cliente do Postgres e Pgadmin 3. Falha na autenticação do usuário "postgres" para o cliente do console e o Pgadmin. Eu digitei o usuário como "postgres" e a senha "postgres", porque funcionava antes. Mas agora a autenticação falhou. Eu fiz isso algumas vezes sem esse problema. O que devo fazer? E o que acontece?

psql -U postgres -h localhost -W
Password for user postgres: 
psql: FATAL:  password authentication failed for user "postgres"
FATAL:  password authentication failed for user "postgres"

1
No meu caso a conexão falha porque a senha é muito complexa ...
JJD

3
Não deixe de ler toda a página. Eu tive que fazer várias coisas para fazer isso funcionar. Primeiro, a ALTERetapa , depois editando meu pg_hba.confarquivo e reiniciando o postgres .
elrobis


Verifique também se não há duas instâncias do Postgres em execução: uma no Windows e outra no Docker. Docker não me informou que a porta já estava tomada. Portanto, a ferramenta conectou-se à máquina Postgres do Windows, enquanto nos postgers do Docker tudo estava bem.
koppor

Respostas:


750

Se bem me lembro, o usuário postgresnão tem uma senha de banco de dados definida no Ubuntu por padrão. Isso significa que você pode efetuar login nessa conta apenas usando a conta de postgres usuário do SO .

Supondo que você tenha rootacesso à caixa, você pode:

sudo -u postgres psql

Se isso falhar com um database "postgres" does not existserro, provavelmente você não está em um servidor Ubuntu ou Debian :-) Nesse caso, basta adicionar template1ao comando:

sudo -u postgres psql template1

Se algum desses comandos falhar com um erro psql: FATAL: password authentication failed for user "postgres", verifique o arquivo /etc/postgresql/8.4/main/pg_hba.conf: Deve haver uma linha como esta como a primeira linha sem comentários:

local   all         postgres                          ident

Para versões mais recentes do PostgreSQL, identna verdade, pode ser peer. Tudo bem também.

Dentro do psqlshell, você pode fornecer uma senha ao usuário do banco de dadospostgres :

ALTER USER postgres PASSWORD 'newPassword';

Você pode deixar o psqlshell por digitação CtrlDou com o comando \q.

Agora você deve poder fornecer ao pgAdmin uma senha válida para o superusuário do banco de dados e ela ficará feliz também. :-)


Está melhor, obrigado! psql está funcionando. Mas ainda tenho problemas com o pgadmin3 - ele me pediu uma senha para o usuário root do sistema. (estranho para mim) pg_hba.conf como você diz.
I159 /

Eu adicionaria para sair do console usando '\ q'. Levei um tempo para descobrir que :)
Hakunin

2
Observe que o pg_hba.conf deve ter o usuário do postgres definido identpara que as primeiras etapas funcionem. Se você já o definiu como md5 ou qualquer outra coisa, não poderá fazer login automaticamente.
Cerin 28/09

80
Muito legal. Para outros novos usuários, NÃO ESQUEÇA O SEMICÓLONO no final da linha ALTER USER.
itsols

3
@itsols Você disse: "Muito bom. Para outros novos usuários, NÃO ESQUEÇA O SEMICÓLONO no final da linha ALTER USER" ... Você acabou de uma provação de quatro horas! Eu me sinto muuuito estúpido e grato agora. :-D
frozenjim

148

A resposta da equipe está correta, mas se você quiser automatizar ainda mais, pode:

$ sudo -u postgres psql -c "ALTER USER postgres PASSWORD 'postgres';"

Feito! Você salvou Usuário = postgres e senha = postgres.

Se você não possui uma senha para o usuário postgres, o ubuntu do:

$ sudo passwd postgres


Cuidado se sua senha contém caracteres interessantes como '!'
Brian Peterson

45

Isso foi frustrante, a maioria das respostas acima está correta, mas elas não mencionam que você precisa reiniciar o serviço de banco de dados antes que as alterações no arquivo pg_hba.conf entrem em vigor.

portanto, se você fizer as alterações mencionadas acima:

local all postgres ident

então reinicie como root (no centos é algo como service service postgresql-9.2 restart) agora você deve conseguir acessar o db como o usuário postgres

$psql
psql (9.2.4)
Type "help" for help.

postgres=# 

Espero que isso adicione informações para novos usuários do postgres


26
No ubuntu digite: sudo service postgresql restart
Ann Kilzer

4
para uso no RHEL7sudo systemctl restart postgresql.service
Spechal 6/8

1
E no mac?
AustinT

1
Para Mac, confira esta pergunta sobre SO stackoverflow.com/questions/7975556/...
Rohith Nandakumar

Obrigado Miguel. Eu alterei a senha manualmente e meu pgAdmin não se conectou ao banco de dados até reiniciar o servidor postgres.
Ustin

20

Edite o arquivo pg_hba.conf, por exemplo, com sudo emacs /etc/postgresql/9.3/main/pg_hba.conf

Mude todos os métodos de autenticação para trust. Mude a senha do Unix para o usuário "postgres". Reinicie o servidor. Entre com psql -h localhost -U postgrese use a senha Unix recém-definida. Se funcionar, você poderá redefinir o arquivo pg_hba.conf para os valores padrão.


1
Se você ficar completamente paralisado, este é o único método garantido. Altere todos os métodos para confiar, reinicie o banco de dados e, em seguida, como root sudo su - postgres:, defina / corrija / desative a senha do postgres db (e no shell, se necessário), restaure para métodos md5ou identmétodos seguros e reinicie novamente para que os valores permaneçam. A propósito, no Cent / RedHat 9.4, o arquivo está localizado em:/var/lib/pgsql/9.4/data/pg_hba.conf
PapaK 4/15/15

17

Para aqueles que o estão usando pela primeira vez e não têm informações sobre qual é a senha, eles podem seguir os passos abaixo (supondo que você esteja no ubuntu):

  1. Abra o arquivo pg_hba.conf em/etc/postgresql/9.x/main

     sudo vi pg_hba.conf 

    2. edite a linha abaixo

     local   all             postgres                                peer

    para

     local   all             postgres                                trust
  2. Reinicie o servidor

      sudo service postgresql restart
  3. Finalmente, você pode fazer o login sem a necessidade de uma senha, como mostrado na figuraFinalmente, você pode fazer o login sem a necessidade de uma senha, como mostrado na figura

Consulte aqui para mais informações


12

Se você estiver tentando efetuar login no shell do postgres como usuário do postgres, poderá usar os seguintes comandos.

mudar para o usuário do postgres

# su - postgres

faça login no psql

# psql

espero que ajude


3
su - postgrespede uma senha no PosgreSQL 9.5 no Ubuntu 16.04
Prashanth Chandra

3
su - postgresé o comando sugerido pela documentação oficial do fedora , mas também recebo um prompt de senha. Para contornar que eu segui este email postgres fórum que usa o mesmo comando como a resposta aceita aqui: sudo -u postgres psql. Não se esqueça de iniciar e iniciar o servidor de banco de dados.
precisa

11

Tente não usar o parâmetro -W e deixe a senha em branco. Às vezes, o usuário é criado sem senha.

Se isso não funcionar, redefina a senha. Existem várias maneiras de fazer isso, mas isso funciona em muitos sistemas:

$ su root
$ su postgres
$ psql -h localhost
> ALTER USER postgres with password 'YourNewPassword';

7

Como regra geral: NUNCA DEVE definir uma senha para o usuário pós-graduado .

Se você precisar de um acesso de superusuário do pgAdmin, faça outro superusuário. Dessa forma, se as credenciais desse superusuário estiverem comprometidas, você sempre poderá ssh no host do banco de dados real e excluir manualmente o superusuário usando

sudo -u postgres -c "DROP ROLE superuser;"

1
Qual o motivo dessa regra de ouro?
Gershom

2
Para que você nunca possa ter todos os seus superusuários comprometidos.
Ardilgulez 22/0318

1
Como a configuração de uma senha para o postgres pode comprometer todos os superusuários?
Gershom

4
configurar a senha não leva a que todos os superusuários sejam comprometidos, mas não definir a senha garantirá que você nunca terá todos os superusuários comprometidos. o motivo é: quando você não define a senha, qualquer tentativa de login com senha para o usuário do postgres será negada, enquanto você ainda pode usá-la por confiança.
Ardilgulez 24/0318

7

Quando você estiver no shell do postgres, digite este comando

postgres=# \password postgres

Depois de inserir este comando, você será solicitado a definir sua senha, apenas defina a senha e tente.


3

Ao instalar o postgresql, nenhuma senha é definida para o usuário postgres, você deve defini-la explicitamente no Unix usando o comando:

sudo passwd postgres

Ele solicitará sua senha do sudo e solicitará uma nova senha de usuário do postgres. Fonte



0

Aqui estão algumas combinações nas quais eu tentei fazer o login:

# login via user foo
psql -Ufoo -h localhost

sudo -u postgres psql postgres

# user foo login to postgres db
psql -Ufoo -h localhost -d postgres

0

Eu tive um problema parecido. O Ubuntu me deixou entrar no console com qualquer senha para superusuário. Exceto quando eu me conectei com -h localhost no comando psql line.

Também observei que "localhost: 8080 / MyJSPSiteLogIn" - mostrava: Fatal: erro de autenticação com o usuário "user".

pg_hba.conf estava ok.

Observei que havia duas versões do postgres em execução no mesmo serviço.

Resolvido - desinstalando a versão inutil.


0

Eu já havia enfrentado um problema semelhante. Ao acessar qualquer banco de dados, eu estava recebendo o prompt abaixo após atualizar a senha "a autenticação da senha falhou para o usuário" postgres "" no PGAdmin


Solução:

  1. Desligar o servidor postgres
  2. Execute novamente o pgadmin
  3. O pgadmin solicitará a senha.
  4. Digite a senha atual do usuário mencionado

Espero que ele resolva seu problema

insira a descrição da imagem aqui


-1

Espero que isso ajude você com pouco tempo. Você pode alterar a senha do postgres sql usando o comando abaixo.

Comando

sudo -u postgres psql

E depois você pode atualizar a senha

Comando

Alterar a senha do usuário postgres 'YOUR_NEW_PASSWORD';


1
A sua resposta apenas contém informações, que já foi adicionado: stackoverflow.com/a/7696398/8283469
L. Guthardt
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.