Mensagem de erro do Postgres: FATAL: A autenticação de identificação falhou para o usuário “…”

26

Digamos que você esteja vendo esta mensagem:

FATAL:  Ident authentication failed for user "..."

Quais são as causas dessa mensagem de erro?

Steve Bennett
fonte

Respostas:

36

Isso significa que o Postgres está tentando autenticar um usuário usando o protocolo Ident e não pode. A autenticação de identificação funciona assim:

  • Você tem a função de banco de dados 'foo' no banco de dados 'db'
  • Seu pg_hba.confarquivo (in /etc/postgres-something/main) define 'Ident' como o protocolo para conectar-se ao banco dbde dados para usuários que se conectam a partir de determinados hosts
  • O nome de usuário unix que faz a conexão é 'foo'
  • Um servidor Ident em execução na máquina da qual o usuário está se conectando confirma que o nome de usuário realmente é 'foo'

Possíveis causas e soluções:

  1. Não há um servidor Ident em execução na máquina da qual você está tentando se conectar. Teste isso tentando se conectar a ele na porta 113. Se isso falhar, instale um servidor Ident (por exemplo, sudo apt-get install oidentd).
  2. Há um servidor Ident, mas não há função de banco de dados correspondente ao nome com o qual você está tentando se conectar ('foo' no exemplo acima). Portanto, crie-o conectando-se de alguma forma ao banco de dados com direitos de superusuário e faça CREATE ROLE foo. Como alternativa, adicione uma entrada em /etc/postgresql/.../main/pg_ident.conf.
  3. Talvez o nome de usuário do shell não corresponda à função do banco de dados. Você pode testar isso conectando-se ao servidor Ident durante uma conexão e passando os números de porta corretos.
  4. Talvez você realmente queira se conectar com uma senha , não com Ident. Edite o pg_hba.confarquivo adequadamente. Por exemplo, altere:

    host all all 127.0.0.1/32 ident
    

    para

    host all all 127.0.0.1/32 md5
    
Steve Bennett
fonte
2
Para o fedora, o arquivo está dentro/var/lib/psql/data
Anwar
Suponho que ninguém gostaria de responder por que o postgres usa 'ident' como o login padrão?
icc97
Porque isso fazia sentido há 20 anos e nada muda no * nix? :)
Steve Bennett
@ icc97, nada nesta resposta indica que "ident" é o login padrão para o Postgres; Onde arranjaste essa ideia? Até onde eu sei, o nome da função de superusuário padrão em um cluster do Postgres é "postgres".
Curinga
9

Não tenho certeza sobre as causas, mas isso corrigiu para mim:

em pg_hba.conf

mude para isso:

hospedar todos os 127.0.0.1/32 md5

Erro exato: Caused by: org.postgresql.util.PSQLException: FATAL: Ident authentication failed for user "postgres"

jacktrades
fonte
1
mudando "ident" -> "md5" fez isso por mim
webwesen
3

No CentOS, adicione a seguinte linha a /var/lib/pgsql/9.3/data/pg_hba.conf:

host all all 127.0.0.1/32 trust

E comente as outras entradas.

Claro, essa configuração não é segura, mas se você está apenas brincando em uma VM de desenvolvimento como eu, provavelmente está bem ...

XåpplI'-I0llwlg'I -
fonte
0

Se você ainda não tentou isso, verifique seu arquivo pg_hba.conf. Será nomeado algo como /var/lib/pgsql/9.3/data/pg_hba.conf (Fedora 20); você pode precisar usar 'find / -name pg_hba.conf' para localizá-lo.

Na parte inferior do arquivo, altere os valores 'METHOD' para 'trust' para testes locais (consulte os documentos do postgres para obter informações completas). Reinicie a máquina para garantir que tudo esteja limpo e que os novos parâmetros sejam lidos.

Espero que isso cure suas desgraças. Ele resolveu meus problemas no Fedora 20 com o PostgreSQL 9.3.

Alan Thompson
fonte
Não é necessário reiniciar sua máquina inteira ao alterar as configurações do PostgreSQL. Em vez disso, tente usar pg_ctl reloadno console ou SELECT pg_reload_conf();ao executar o SQL como um usuário privilegiado.
benjwadams