O usuário do PostgreSQL não pode se conectar ao servidor após alterar a senha

10

Encontrei isso com quatro funções que criei:
Após alterar a senha de um usuário no pgAdmin III usando a GUI (1), esse usuário não pode mais fazer login.
Mensagem de erro do pgAdmin III show:

An error has occurred:

Error connecting to the server: FATAL:  password authentication failed for user "sam"
FATAL:  password authentication failed for user "sam"

Meu sistema: Postgresql 9.2 no Ubuntu 12.04

Existe alguma maneira de corrigir isso?

(1): faça o login com a conta postgres, clique com o botão direito do mouse em Login Roles, vá para a aba 'Definition' e digite a senha

Cao Minh Tu
fonte

Respostas:

15

É possível que você esteja sendo mordido por esse bug do PgAdmin ( changelog ):

2012-11-28 AV 1.16.1 Os controles do seletor de data retornam um carimbo de data / hora completo por padrão, o que pode causar alterações inadvertidas de data nos trabalhos e nas datas de validade da função. Ignore a parte do tempo.

Foi visto que esse bug definia datas de expiração de senha no passado, como 1/1/1970. Nesse caso, a mensagem de erro ao tentar se conectar não é diferente de uma senha incorreta.

Você pode verificar essas datas de validade com:

SELECT usename,valuntil FROM pg_user;

e se estiverem errados, redefina-os com:

ALTER USER username VALID UNTIL 'infinity';

e atualize o pgAdmin.

Daniel Vérité
fonte
Muito obrigado! Isso resolveu o problema. Sempre que redefinir uma senha de usuário, o pgAdmin define o tempo válido até 01-01-1970, para que o usuário não possa mais fazer login.
Cao Minh Tu
você entendeu! caramba bugs
Carter Cole
Como exatamente eu devo logar no psql ??? Esse é o papel que acabei de atualizar.
usar o seguinte código
11
@ ericpeters0n: alterne temporariamente o método de autenticação para trustou peerno pg_hba.confarquivo desta conta.
Daniel Vérité 21/04
Obrigado, resolvi. Para aqueles que vêm depois, a "confiança" significa que: Depois de reiniciar o postgres, você poderá executar o psql sem autenticação de senha se for um usuário com o mesmo nome que um usuário privilegiado (por exemplo, nome de usuário 'postgres'). Portanto, 'su - postgres psql' permitirá que você efetue login e corrija a senha ou a data válida.
usar o seguinte código
3

A coisa mais simples a fazer é efetuar login com o psql ou pgAdmin e

ALTER USER sam WITH PASSWORD 'new_password';

Agora, se você não conseguir fazer login com uma conta de superusuário, poderá se recuperar alterando as configurações de pg_hba.conf para esse usuário e recarregando a configuração (às vezes acho que isso requer a reinicialização do servidor, mas não sei por que).

O que você pode fazer é adicionar uma linha que permita efetuar login usando o método ident (ponto 9.2) (se você puder usar uma conta de sistema local com o mesmo nome que o usuário) para conexões locais para o usuário ou (se isso não é possível) definido como "confiar" (muito temporariamente!). Se estiver usando confiança, recue o mais rápido possível, pois isso significa "confiar que o usuário é quem ele afirma!" e, consequentemente, é perigoso deixar essa configuração ativada fora das necessidades imediatas de recuperação.

Depois de fazer o login, você pode redefinir a senha acima.

Chris Travers
fonte
O pgAdmin não deve executar apenas o mesmo comando?
Dezso
(observando eu disse psql ou pgAdmin O que posso fazer para torná-lo mais claro.?)
Chris Travers
Não, não, eu apenas pensei que alterar senhas na GUI faz o mesmo. Se isso acontecer, não consigo imaginar o que poderia dar errado?
Dezso
O que poderia dar errado? Typos na senha para começar ....
Chris Travers
Não é possível simplesmente definir a senha novamente uma vez logado como postgres?
Dezso
2

Para a variante do Windows - Eu também experimentei esse bug desagradável por causa do pgAdmin para minha instalação do Windows x64 da versão 9.2. Deixou minha produção paralisada.

Na pasta C:\Program Files\PostgreSQL\9.2\dataou C:\Program Files (x86)\PostgreSQL\9.**x**\data, você encontrará o arquivo de texto pg_hba.conf .

Encontre as seguintes linhas:

# TYPE  DATABASE        USER            ADDRESS                 METHOD

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

e altere METHOD md5 para "trust" assim:

# TYPE  DATABASE        USER            ADDRESS                 METHOD

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

Do Windows>Runtipo "services.msc" e [enter] encontre a instância correta do PostgreSQL e reinicie-a.

Sua segurança de banco de dados está agora totalmente aberta! Preste atenção ao aviso para retorná-lo ao md5 após alterar o tempo de expiração da senha do usuário para dizer o ano 2099 para todos os usuários relevantes.

Hoang Do
fonte
1

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.

ATUALIZAÇÃO 14-10-2016:

No Ubuntu, o nome do arquivo necessário é /etc/postgresql/9.5/main/pg_hba.conf. Apenas para testes locais , modifique-o para ficar assim:

...
#
# 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                                     trust
# IPv4 local connections:
# host    all             all             127.0.0.1/32            md5
  host    all             all             127.0.0.1/32            trust

As duas linhas com o método "confiança" são novas. Eles permitem que você se conecte sem um nome de usuário / senha.

Quando concluído, você precisará reiniciar o servidor via:

sudo systemctl restart postgresql 
Alan Thompson
fonte
Para que o pg_hba.confefeito entre em vigor, você precisa apenas de uma recarga, não de uma reinicialização. Além disso, sua sugestão parece incompleta, pois não está claro como isso resolveria o problema no final.
Dez26
1

Acabei de ter o mesmo problema e constatou-se que eu tinha vários usuários com o mesmo nome (casos diferentes). Depois que mesclei a propriedade e removi uma, ficou pelo menos claro. Dependendo do método de conexão, o caso não foi necessariamente transferido para autenticação.

George
fonte