psql: FATAL: a autenticação de identificação falhou para o usuário "postgres"


372

Instalei o PostgreSQL e o pgAdminIII na minha caixa do Ubuntu Karmic.

Consigo usar o pgAdminIII com êxito (por exemplo, conectar / fazer logon), no entanto, quando tento fazer login no servidor usando o mesmo nome de usuário / pwd na linha de comando (usando o psql), recebo o erro:

psql: FATAL:  Ident authentication failed for user "postgres"

Alguém agora como resolver este problema?


Este post stackoverflow trabalhou para mim: stackoverflow.com/a/18664239/2110769
Andrea Araldo

Respostas:


194

Você definiu as configurações apropriadas no pg_hba.conf?

Veja https://help.ubuntu.com/stable/serverguide/postgresql.html como fazê-lo.


36
Isso não funciona para mim. Passei horas nisso! Tudo o que eu quero fazer é executar comandos psql no meu terminal. O que eu preciso para que o arquivo pareça fazer isso?
Sean

54
@SeanA você precisa de algo como 'sudo -u postgres psql'
JLarky 16/02

8
Não se esqueça de ';' no final de cada instrução no psql. Parece bobagem, mas acontece hehe.
Omrsin

42
@ Robert: "postgresql é o db mais hostil do usuário"? Experimente a Oracle alguns dias para ter alguma perspectiva ... :)
mivk

5
Para aqueles que usam rails, tive que definir o pg_hba.conf e alterar 'ident' para 'password'. Mudar para confiar não funcionou.
Abe Petrillo 10/09

412

As etapas a seguir funcionam para uma nova instalação do postgres 9.1 no Ubuntu 12.04. (Também funcionou no postgres 9.3.9 no Ubuntu 14.04.)

Por padrão, o postgres cria um usuário chamado 'postgres'. Nós logamos como ela e damos a ela uma senha.

$ sudo -u postgres psql
\password
Enter password: ...
...

Efetue logout psqldigitando \qou ctrl+d. Então nos conectamos como 'postgres'. A -h localhostparte é importante : diz ao psqlcliente que queremos conectar usando uma conexão TCP (que está configurada para usar autenticação por senha), e não por uma conexão PEER (que não se importa com a senha).

$ psql -U postgres -h localhost

13
Se você definir PGHOST=localhost, não precisará especificar a -hopção todas as vezes. Isso também funciona com outros pg_*comandos, como pg_dump.
Sameer


2
Isso foi necessário para habilitar uma instalação do Mediawiki no Debian com o PostgreSQL.
Mivk #

Dois anos depois, e eu preciso fazer isso em um Mac também.
Manav

11
ruim, porque há um problema de segurança, consulte aqui: serverfault.com/questions/110154/...
Erdinc Ay

161

Edite o arquivo /etc/postgresql/8.4/main/pg_hba.confe substitua identou peerpor um md5ou trust, dependendo se você deseja solicitar uma senha em seu próprio computador ou não. Em seguida, recarregue o arquivo de configuração com:

/etc/init.d/postgresql reload

4
um comando reinicie o postgresql: /etc/init.d/postgresql restart
Tyler Long

14
Por que reiniciar quando uma recarga é tudo o que você precisa?
precisa saber é o seguinte

Neste caso: "/etc/init.d/postgresql-8.4 reload"
shaytac

11
este aqui funcionou para mim. Mudar de par para md5 foi suficiente.
Jonatas CD

11
OK, eu sou um noob do postgresql, mas devo relatar que só restartfuncionou para mim, não reload--- após as alterações em /etc/postgresql/9.5/main/pg_hba.conf(mudar peerpara trust).
Mike O'Connor

91

Você está recebendo esse erro porque está com falha na autenticação do cliente. Com base na mensagem de erro, você provavelmente possui a configuração padrão do postgres, que define o método de autenticação do cliente como "IDENT" para todas as conexões do PostgreSQL.

Você deve definitivamente ler a seção 19.1 Autenticação de cliente no manual do PostgreSQL para entender melhor as configurações de autenticação disponíveis (para cada registro no pg_hba.conf ), mas aqui está o trecho relevante para ajudar no problema que você está tendo (no manual da versão 9.5 ):

Confiar em

Permita a conexão incondicionalmente. Este método permite que qualquer pessoa que possa se conectar ao servidor de banco de dados PostgreSQL faça o login como qualquer usuário do PostgreSQL que desejar, sem a necessidade de uma senha ou qualquer outra autenticação. Veja a Seção 19.3.1 para detalhes.

rejeitar

Rejeite a conexão incondicionalmente. Isso é útil para "filtrar" determinados hosts de um grupo, por exemplo, uma linha de rejeição pode impedir a conexão de um host específico, enquanto uma linha posterior permite que os hosts restantes em uma rede específica se conectem.

md5

Exija que o cliente forneça uma senha com hash MD5 duplo para autenticação. Consulte a Seção 19.3.2 para obter detalhes.

senha

Exija que o cliente forneça uma senha não criptografada para autenticação. Como a senha é enviada em texto não criptografado pela rede, ela não deve ser usada em redes não confiáveis. Consulte a Seção 19.3.2 para obter detalhes.

gss

Use GSSAPI para autenticar o usuário. Isso está disponível apenas para conexões TCP / IP. Consulte a Seção 19.3.3 para obter detalhes.

sspi

Use SSPI para autenticar o usuário. Isso está disponível apenas no Windows. Consulte a Seção 19.3.4 para obter detalhes.

ident

Obtenha o nome de usuário do sistema operacional entrando em contato com o servidor ident no cliente e verifique se ele corresponde ao nome de usuário do banco de dados solicitado. A autenticação de identidade pode ser usada apenas em conexões TCP / IP. Quando especificado para conexões locais, a autenticação de mesmo nível será usada. Consulte a Seção 19.3.5 para obter detalhes.

par

Obtenha o nome de usuário do sistema operacional do cliente no sistema operacional e verifique se ele corresponde ao nome de usuário do banco de dados solicitado. Isso está disponível apenas para conexões locais. Consulte a Seção 19.3.6 para obter detalhes.

LDAP

Autentique usando um servidor LDAP. Consulte a Seção 19.3.7 para obter detalhes.

raio

Autentique usando um servidor RADIUS. Consulte a Seção 19.3.8 para obter detalhes.

cert

Autentique usando certificados de cliente SSL. Consulte a Seção 19.3.9 para obter detalhes.

pam

Autentique usando o serviço Pluggable Authentication Modules (PAM) fornecido pelo sistema operacional. Consulte a Seção 19.3.10 para obter detalhes.

Então ... para resolver o problema que você está enfrentando, siga um destes procedimentos:

  1. Altere o (s) método (s) de autenticação definido (s) no seu pg_hba.conf arquivo para trust, md5ou password(dependendo das suas necessidades de segurança e simplicidade) para os registros de conexão local que você definiu lá.

  2. Atualize pg_ident.confpara mapear os usuários do sistema operacional para usuários do PostgreSQL e conceda a eles os privilégios de acesso correspondentes, dependendo de suas necessidades.

  3. Deixe as configurações de IDENT em paz e crie usuários no banco de dados para cada usuário do sistema operacional ao qual você deseja conceder acesso. Se um usuário já estiver autenticado pelo sistema operacional e conectado, o PostgreSQL não exigirá autenticação adicional e concederá acesso a esse usuário com base em quaisquer privilégios (funções) atribuídos a ele no banco de dados. Esta é a configuração padrão.

Nota: A localização pg_hba.confe pg_ident.confdepende do SO.


4
Para mim, esta é a melhor resposta. Quando você conhece todas essas opções, pode facilmente ajustar o conf. E especialmente quando você está na máquina Dev, pode simplesmente definir 'ident' para todas as entradas para evitar desperdiçar seu tempo. Graças
venkatareddy

11
Isso foi útil para mim também. No meu caso, o arquivo pg_hba.conf foi definido como ponto, mudei para senha. Note que a partir de uma instalação com baunilha, também tive que definir uma senha para o usuário do postgres, sudo su - postgres psql, \ password definir uma senha. Em seguida, inicie uma conexão padrão no pdgadmin3 com o nome de usuário postgres e sua senha que você definiu.
Edencorbin

11
E onde esse arquivo foi encontrado? Concedido, você pode precisar fazer uma lista, pois parece não haver consistência entre as versões. Eu acho que vou apenas procurar em '/'.
JosephK

11
No Ubuntu-16.04 é /etc/postgresql/9.6/main/pg_hba.conf.
Mike O'Connor

11
Como alguém que é novo para psql, esta é uma grande ajuda e deve ser a resposta aceito como ele atende a vários métodos de autenticação
Vyrnach

45

Simplesmente adicionar o -h localhostbit era todo meu necessário para trabalhar


Sabemos por que isso corrige isso?
Michael Pell

Os padrões do postgresql não estão definidos razoavelmente. Eles podem ter consertado agora, eu não sei. Obviamente, o URL padrão deve serthis_computer = 'http://localhost'
boulder_ruby

15

Você pode definir a variável de ambiente PGHOST=localhost:

$ psql -U db_user db_name
psql: FATAL:  Peer authentication failed for user "db_user"

$ export PGHOST=localhost
$ psql -U db_user db_name

Password for user mfonline:

15

Caso nenhuma das opções acima funcione para você:

eu fiz algumas instalações do Postgres, mas fiquei confusa hoje em um sistema RedHat 6.5 (instalando o Postgres 9.3). Minha configuração típica do hba.conf que o Aron mostra acima não funcionou. Acabou que meu sistema estava usando IPV6 e ignorando a configuração IPV4. Adicionando a linha:

host    all             all             ::1/128                 password

permitiu-me entrar com sucesso.


Obrigado Ethan. Estou executando o Fedora 20 e estou enfrentando o mesmo problema do OP. Depois de alterar o IPV4 e o IPV6 para senha. A conexão foi bem sucedida.
Ibn Saeed

11
Você é muito bem-vindo. Muitas vezes eu me beneficiei de outras postagens ao encontrar um problema de programação ou sistema. Ainda bem que pude retribuir um pouco.
Ethan Brown

11
Isso salvou minha vida no Fedora 32!
Rami

12

De todas as respostas acima, nada funcionou para mim. Eu tive que alterar manualmente a senha dos usuários no banco de dados e de repente funcionou.

psql -U postgres -d postgres -c "alter user produser with password 'produser';"

Eu usei as seguintes configurações:

pg_hba.conf

local   all             all                                     peer
# IPv4 local connections:
host    all             all             127.0.0.1/32            password  
# IPv6 local connections:
host    all             all             ::1/128                 password

Finalmente, a conexão foi bem-sucedida para o seguinte comando:

psql -U produser -d dbname -h localhost -W 

Depois disso me ajudou aqui, Joseph. Especialmente, o comando de conexão no final para me ajudar a testá-lo. Além disso, eu adicionaria uma reinicialização do serviço Postgresql, caso alguém esteja se perguntando (mas entendo que está implícito). Aprecio muito!
Harlin

10

Eu descobri que tinha que instalar um servidor de identidade, que escuta na porta 113.

sudo apt-get install pidentd
sudo service postgresql restart

E então ident funcionou.


10

Hummm ...

Se você puder se conectar com o nome de usuário e a senha no pgAdminIII, mas não puder se conectar psql, esses dois programas provavelmente estão se conectando ao banco de dados de maneira diferente.

[Se você estiver se conectando a bancos de dados diferentes, primeiro tente conectar-se ao mesmo banco de dados. Ver abaixo.]

Do PostgreSQL: Documentação: 9.3: psql :

Se você omitir o nome do host, o psql se conectará por meio de um soquete de domínio Unix a um servidor no host local ou via TCP / IP ao host local em máquinas que não possuam soquetes de domínio Unix.

Se você não está executando algo como psql ... -h host_name ...o Ubuntu e psqldeve estar conectado através de um soquete de domínio Unix, o PostgreSQL provavelmente não está configurado para permitir um dos métodos de autenticação de senha para o usuário do postgres .

Você pode testar isso executando:

sudo -u postgres psql

Se as obras acima, o servidor provavelmente está configurado para uso de pares de autenticação para ligações locais pelo postgres usuário, isto é, pedindo o sistema operacional para o seu nome de usuário para confirmar que você está postgres .

Portanto, é provavelmente o seu arquivo pg_hba.conf

O caminho completo do arquivo será algo como /etc/postgresql/9.3/main/pg_hba.conf . Você pode visualizá-lo, por exemplo sudo cat /etc/postgresql/9.3/main/pg_hba.conf | more.

Se você estiver omitindo o nome do host em seu psqlcomando, poderá conectar-se se adicionar a seguinte entrada ao seu arquivo pg_hba.conf :

# Connection type   Database   User       IP addresses   Method
local               all        postgres                  md5

[As linhas comentadas no arquivo pg_hba.conf começam com #.]

Se você estiver incluindo o nome do host em seu psqlcomando, adicione esta entrada:

# Connection type   Database   User       IP addresses   Method
host                all        postgres   127.0.0.1/32   md5

Você precisa inserir a entrada antes que outras entradas correspondam à sua conexão via psql. Em caso de dúvida sobre onde colocá-lo, basta colocá-lo antes da primeira linha não comentada.

Mais sobre o pg_hba.conf

Do PostgreSQL: Documentação: 9.3: O arquivo pg_hba.conf [bold ênfase meu]:

O primeiro registro com um tipo de conexão , endereço do cliente , banco de dados solicitado e nome de usuário correspondentes é usado para executar a autenticação. Não há "fall-through" ou "backup": se um registro for escolhido e a autenticação falhar, os registros subsequentes não serão considerados. Se nenhum registro corresponder, o acesso será negado.

Observe que os registros não são correspondidos no método de autenticação. Portanto, se o seu arquivo pg_hba.conf contiver a seguinte entrada:

# Connection type   Database   User       IP addresses   Method
local               all        postgres                  peer

Então você não poderá se conectar via:

psql -u postgres

A menos que uma dessas entradas esteja no seu arquivo pg_hba.conf acima da entrada anterior:

# Connection type   Database   User       IP addresses   Method
local               all        postgres                  md5
local               all        postgres                  password   # Unencrypted!
local               all        all                       md5
local               all        all                       password   # Unencrypted!

2
atrasado para o jogo, mas, falando sério, obrigado por se esforçar para explicar as coisas corretamente, para que eu entenda!
Jeffrey 'jf' Lim

10

No meu caso, a solução aqui: (para as pessoas interessadas) faça login no postgres:

sudo -i -u postgres
psql
ALTER USER postgres WITH PASSWORD 'postgres'; # type your password here

Saudações


7

O problema ainda é o seu arquivo pg_hba.conf. Esta linha: Você pode encontrar este arquivo em / etc / postgres / varion / main

local   all             postgres                                peer
Should be

local   all             postgres                                md5

Estas são breves descrições de ambas as opções, de acordo com os documentos oficiais do PostgreSQL sobre métodos de autenticação.

Autenticação de mesmo nível

O método de autenticação por pares funciona obtendo o nome de usuário do sistema operacional do cliente a partir do kernel e usando-o como o nome de usuário permitido do banco de dados (com mapeamento opcional de nome de usuário). Este método é suportado apenas em conexões locais.

Autenticação de senha

Os métodos de autenticação baseados em senha são md5 e password. Esses métodos operam de maneira semelhante, exceto pela maneira como a senha é enviada pela conexão, ou seja, com hash MD5 e texto não criptografado, respectivamente.

Se você está preocupado com ataques de "sniffing" de senhas, o md5 é o preferido. Senha simples sempre deve ser evitada, se possível. No entanto, o md5 não pode ser usado com o recurso db_user_namespace. Se a conexão estiver protegida pela criptografia SSL, a senha poderá ser usada com segurança (embora a autenticação do certificado SSL possa ser uma escolha melhor se estiver dependendo do uso do SSL).

Após alterar este arquivo, não se esqueça de reiniciar o servidor PostgreSQL. Se você estiver no Linux, isso seriasudo service postgresql restart.


7

Para fedora26 e postgres9.6

Primeiro, efetue log como root do usuário e, em seguida, insira no psql pelos seguintes comandos

$ su postgres  

então

$ psql

em psqlencontrar a localização de hba_file ==> significapg_hba.conf

postgres=# show hba_file ; 
 hba_file  
--------------------------------------   
 /etc/postgresql/9.6/main/pg_hba.conf  
(1 row)  

no arquivo pg_hba.confalterar o acesso do usuário a este

host all all 127.0.0.1/32 md5

6

minha solução no PostgreSQL 9.3 no Mac OSX no shell bash foi usar sudopara ir para a pasta de dados e depois anexar as linhas necessárias ao pg_hba.confarquivo para permitir que todos os usuários sejam confiáveis ​​e possam efetuar login. Foi isso que fiz :

# in bash_profile edit PGDATA environmental variable
open ~/.bash_profile

# append this line to bash_profile
export PGDATA="/Library/PostgreSQL/9.3/data"

# reload bash_profile
source ~/.bash_profile

# open pg_hba.conf in vim
sudo vi /Library/PostgreSQL/9.3/data/pg_hba.conf

# append these two lines to the end of the pg_hba.conf file
local   all   all                  trust
host    all   all   127.0.0.1/32   trust

# can now login as user in bash
psql -d <db_name> -U <user_name> -W

11
Isso é bom para o servidor de desenvolvimento, mas eu não recomendaria isso para um ambiente de produção, pois você não precisa mais de uma senha para se conectar ao banco de dados com essas configurações.
Michael


4

Passei mais tempo resolvendo esse erro que gostaria de admitir.

A ordem da configuração da autenticação no pg_hba.conf é relevante no seu caso, eu acho. O arquivo de configuração padrão inclui várias linhas em uma instalação de baunilha. Esses padrões podem corresponder às condições de suas tentativas de autenticação, resultando em uma falha na autenticação. Ele falha independentemente da configuração adicional adicionada no final do arquivo .conf.

Para verificar qual linha de configuração é usada, verifique se há mensagens no arquivo de log padrão. Você pode ver algo assim

LOG:  could not connect to Ident server at address "127.0.0.1", port 113: Connection refused
FATAL:  Ident authentication failed for user "acme" 
DETAIL:  Connection matched pg_hba.conf line 82: "host     all             all             127.0.0.1/32            ident"

Acontece que esta linha padrão está causando a rejeição.

host    all             all             127.0.0.1/32            ident

tente comentar.


3

Uma dica é editar o pg_hba.conf

sudo vi /etc/postgresql/9.3/main/pg_hba.conf

Para temporariamente

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

Neste ponto, você está pronto. Por segurança, vá e

sudo -u postgres psql template1
ALTER USER postgres with encrypted password 'your_password';

volte e defina pg_hba.conf de volta para

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

1

Eu tive um problema semelhante e o corrigi no pg_hba.conf ao remover todos os métodos ident , mesmo para o endereço IP6 (apesar de eu ter apenas IP4 na máquina).

host all all 127.0.0.1/32 password
host all all ::1/128 password
#for pgAdmin running at local network
host all all 192.168.0.0/24 md5


0

Se você o estiver usando no CentOS, talvez seja necessário recarregar o postgres depois de fazer as soluções acima:

systemctl restart postgresql-9.3.service

Agora é sópostgresql
Neil Chowdhury

O serviço postgresql do @NeilChowdhury ainda possui versão no nome do serviço, pelo menos nos sistemas Linux. Execute este comando para versystemctl status | grep postgres
Ikrom 27/09/18

0

Eu tive que reinstalar o pdAdmin para resolver esse problema

brew cask reinstall pgadmin4

0

No Windows, se você não deseja editar o arquivo pb_gba.conf, ou seja, deixe o método para MD5 (padrão), crie um novo usuário executando esta consulta na ferramenta de consulta no PGadmin PGadmin

CREATE USER admin WITH PASSWORD 'secret'

então em cmd

psql "dbname=Main_db host=127.0.0.1 user=admin password=secret port=5432

onde dbname é seu db no postgresql

insira a descrição da imagem aqui


-3

Isso funcionou para mim: http://tecadmin.net/fatal-ident-authentication-failed-for-user-postgres/#

local   all             postgres                                trust
local   all             myapp_usr                               trust
# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
# IPv6 local connections:
#host    all             all             ::1/128                 trust

11
Isso permite que qualquer pessoa do localhost efetue login como qualquer usuário. Esse comportamento não é mencionado em nenhum lugar do link. E sim, as páginas de informações do debian contêm a mesma coisa.
rkapl
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.