Esqueci a senha inserida durante a instalação do postgres

205

Esqueci ou digitei incorretamente (durante a instalação) a senha do usuário padrão do Postgres. Não consigo executá-lo e recebo o seguinte erro:

psql: FATAL:  password authentication failed for user "hisham"
hisham-agil: hisham$ psql 

Existe uma maneira de redefinir a senha ou como criar um novo usuário com privilégios de superusuário?

Eu sou novo no Postgres e o instalei pela primeira vez. Estou tentando usá-lo com o Rails e estou executando o Mac OS X Lion.

hilarl
fonte
1
Ainda não posso comentar as respostas, então tenho que fazê-lo dessa maneira. Eu fiz o que SaiyanGirl disse, no entanto, ainda precisava digitar uma senha, que era 'postgres' para efetuar login, para que eu pudesse redefinir a senha.
Pascale

Respostas:

359
  1. encontre o arquivo pg_hba.conf- ele pode estar localizado, por exemplo, em /etc/postgresql-9.1/pg_hba.conf.

    cd /etc/postgresql-9.1/

  2. Apoia-la

    cp pg_hba.conf pg_hba.conf-backup

  3. coloque a seguinte linha (como a primeira linha não comentada ou como a única):

Para todas as ocorrências abaixo (local e host), exceto a seção de replicação, se você não tiver nenhuma, ela deve ser alterada da seguinte forma, não deve estar presente nenhuma autenticação MD5 ou de mesmo nível.

local  all   all   trust
  1. reinicie o servidor PostgreSQL (por exemplo, no Linux :)

    sudo /etc/init.d/postgresql restart

    Se o serviço (daemon) não iniciar o relatório no arquivo de log:

    conexões locais não são suportadas por esta compilação

    você deveria mudar

    local all all trust

    para

    host all all 127.0.0.1/32 trust

  2. agora você pode se conectar como qualquer usuário. Conecte-se como superusuário postgres(observe que o nome do superusuário pode ser diferente em sua instalação. Em alguns sistemas, é chamado pgsql, por exemplo ) .

    psql -U postgres

    ou

    psql -h 127.0.0.1 -U postgres

    (observe que, com o primeiro comando, você nem sempre estará conectado ao host local)

  3. Redefinir senha ('substitua my_user_name pelo postgres, pois você está redefinindo o usuário do postgres )

    ALTER USER my_user_name with password 'my_secure_password';

  4. Restaurar o antigo pg_hba.conf, pois é muito perigoso ficar por perto

    cp pg_hba.conf-backup pg_hba.conf

  5. reinicie o servidor para executar com o cofre pg_hba.conf

    sudo /etc/init.d/postgresql restart

Leitura adicional sobre esse arquivo pg_hba: http://www.postgresql.org/docs/9.1/static/auth-pg-hba-conf.html

Arsen7
fonte
9
E então começar psql? Ainda estou sendo solicitado a
fornecer
4
essa resposta NÃO funcionou para mim, depois da etapa 3, o serviço não será iniciado, não sei, talvez seja o SO (W8), apenas não.
Scaramouche 12/09
3
alguém para Windows?
Mahesha999
2
Lembre-se da ordem das entradas no pg_hba.conf é importante. Se você adicionar "local all all trust" ao final do arquivo, ele não funcionará conforme o esperado, pois os registros anteriores serão correspondidos primeiro. Então coloque isso no topo do arquivo para ter o que você espera.
Tagar
6
Se você estiver no Windows com esse erro, continue navegando até a resposta de @SaiyanGirl. Apenas modfiy as colunas método da entradas existentes a 'confiança', então alterá-lo de volta quando estiver pronto
sean.hudson
99

Ao conectar-se ao postgres a partir da linha de comando, não se esqueça de adicionar -h localhostcomo parâmetro da linha de comando. Caso contrário, o postgres tentará se conectar usando o modo de autenticação PEER.

A seguir, mostramos uma redefinição da senha, um login com falha na autenticação PEER e um login bem-sucedido usando uma conexão TCP.

# sudo -u postgres psql
could not change directory to "/root"
psql (9.1.11)
Type "help" for help.

postgres=# \password
Enter new password:
Enter it again:
postgres=# \q

Falha:

# psql -U postgres -W
Password for user postgres:
psql: FATAL:  Peer authentication failed for user "postgres"

Trabalhando com -h localhost:

# psql -U postgres -W  -h localhost
Password for user postgres:
psql (9.1.11)
SSL connection (cipher: DHE-RSA-AES256-SHA, bits: 256)
Type "help" for help.

postgres=#
SaeX
fonte
7
Obrigado pela dica sobre a opção "-h", me ajudou.
precisa saber é o seguinte
Desnecessário no Windows cmd.exe
Fabien Haddadi
1
Melhor resposta para mac
Muhammad Umar
72

O arquivo pg_hba.conf( C:\Program Files\PostgreSQL\9.3\data) mudou desde que essas respostas foram dadas. O que funcionou para mim, no Windows, é abrir o arquivo e mudar a METHODpartir md5de trust:

# 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

Depois, usando o pgAdmin III, efetuei login sem senha e alterei a postgres'senha do usuário , acessandoFile -> Change Password

SaiyanGirl
fonte
Isso não funciona porque o PgAdmin ainda solicita a senha atual ... Redefino para 'trust' e reiniciei o PgAdmin. Ainda não é possível redefinir sem digitar a senha ATUAL ...
gene b.
1
Uma vez que você alterar o método para trustque você pode seguir este e senha alter em cmd
Gilad Verde
12

Apenas uma observação, no Linux Você pode simplesmente executar sudo su - postgrespara se tornar o usuário do postgres e, a partir daí, alterar o que é necessário usando o psql.

Daniel
fonte
3
você ainda precisa da senha depois de executar o psql #
Snow
8
  1. Edite o arquivo /etc/postgresql/<version>/main/pg_hba.confe encontre a seguinte linha:

    local   all             postgres                                md5
  2. Edite a linha e altere md5no final para truste salve o arquivo

  3. Recarregue o serviço postgresql

    $ sudo service postgresql reload
  4. Isso carregará os arquivos de configuração. Agora você pode modificar o postgresusuário efetuando login no psqlshell

    $ psql -U postgres
  5. Atualize a postgressenha do usuário

    alter user postgres with password 'secure-passwd-here';
  6. Edite o arquivo /etc/postgresql/<version>/main/pg_hba.confe trustvolte para md5e salve o arquivo

  7. Recarregue o serviço postgresql

    $ sudo service postgresql reload
  8. Verifique se a alteração da senha está funcionando

    $ psql -U postgres -W
Ray Hunter
fonte
É tão difícil fornecer uma solução para Windows? Nem todo mundo usa Linux com sudo. Como eu faria isso no Windows ??
gene b.
7

Eu estava tendo esse problema no Windows 10 e o problema no meu caso era que eu estava apenas executando psql e estava tentando fazer logon com meu nome de usuário do Windows ("Nathan"), mas não havia nenhum usuário do PostgreSQL com esse nome, e não estava me dizendo isso.

Portanto, a solução foi executar, psql -U postgrese não apenas psql, e a senha que eu inseri na instalação funcionou.

Nathan Wailes
fonte
5

Adicionando a resposta para o usuário do Windows para a versão mais recente do postgres (> 10),

Vá para o local de instalação do postgres e pesquise pg_hba.conf, você o encontrará em..\postgres\data\pg_hba.conf

Abra esse arquivo com o bloco de notas, encontre esta linha,

# 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
#..

Mude o método de md5 para trust,

# 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
# ...

Agora vá para o seu SQL Shell (PSQL) e deixe tudo em branco,

Server [localhost]:
Database [postgres]:
Port [8000]:
Username [postgres]: 

Desta vez, não solicitará a senha e você estará logado,

Agora execute esta linha, ALTER USER yourusername WITH SUPERUSER

Agora você pode deixar o shell com \ q

Novamente, vá para o arquivo pg_hba.conf e altere METHOD de trust para md5 novamente e salve-o.

Agora entre com seu novo usuário e senha e você pode verificar \ du por seus atributos.

Bidhan Majhi
fonte
1

Para instalação do Windows, um usuário do Windows é criado. E "psql" usa esse usuário para conectar-se à porta. Se você alterar a senha do usuário do PostgreSQL, a senha do Windows não será alterada. O juste da linha de comando abaixo funciona apenas se você tiver acesso à linha de comando.

Em vez disso, você pode usar o aplicativo da GUI do Windows "c: \ Windows \ system32 \ lusrmgr.exe". Este aplicativo gerencia usuários criados pelo Windows. Agora você pode modificar a senha.

cpunky
fonte
1

O que fiz para resolver o mesmo problema foi:

Abra o arquivo pg_hba.conf com o editor gedit no terminal:

sudo gedit /etc/postgresql/9.5/main/pg_hba.conf

Ele solicitará a senha. Digite sua senha de login do administrador. Isso abrirá o gedit com o arquivo Cole a seguinte linha:

host  all   all  127.0.0.1/32  trust

logo abaixo -

# Database administrative login by Unix domain socket

Salve e feche-o. Feche o terminal, abra-o novamente e execute este comando:

psql -U postgres

Agora você entrará no console psql. Agora mude a senha digitando o seguinte:

ALTER USER [your prefered user name] with password '[desired password]';

Se diz que o usuário não existe, em vez de ALTERusarCREATE .

Por fim, remova a linha que você colou em pg_hba e salve-a.

Inconnu
fonte
0

Se você estiver no Windows, basta executar

net user postgres postgres

e faça o login no postgres com o postgres / postgres como usuário / senha

ivofernandes
fonte
0

O arquivo .pgpass no diretório inicial de um usuário ou o arquivo referenciado por PGPASSFILE pode conter senhas a serem usadas se a conexão exigir uma senha (e nenhuma senha foi especificada de outra forma). No Microsoft Windows, o arquivo é nomeado% APPDATA% \ postgresql \ pgpass.conf (em que% APPDATA% se refere ao subdiretório Dados do Aplicativo no perfil do usuário).

Este arquivo deve conter linhas do seguinte formato:

nome do host: porta: banco de dados: nome de usuário: senha

(Você pode adicionar um comentário de lembrete ao arquivo, copiando a linha acima e precedendo-a com #.) Cada um dos quatro primeiros campos pode ser um valor literal, ou *, que corresponda a qualquer coisa. O campo de senha da primeira linha que corresponde aos parâmetros de conexão atuais será usado. (Portanto, coloque as entradas mais específicas primeiro quando você estiver usando caracteres curinga.) Se uma entrada precisar conter: ou \, escape esse caractere com. Um nome de host localhost corresponde às conexões TCP (nome do host localhost) e soquete do domínio Unix (pghost vazio ou diretório de soquete padrão) provenientes da máquina local. Em um servidor em espera, um nome de banco de dados de replicação corresponde às conexões de replicação de streaming feitas no servidor principal. O campo do banco de dados é de utilidade limitada porque os usuários têm a mesma senha para todos os bancos de dados no mesmo cluster.

Nos sistemas Unix, as permissões no .pgpass devem proibir qualquer acesso ao mundo ou grupo; consiga isso com o comando chmod 0600 ~ / .pgpass. Se as permissões forem menos rigorosas que isso, o arquivo será ignorado. No Microsoft Windows, supõe-se que o arquivo esteja armazenado em um diretório seguro, portanto, nenhuma verificação especial de permissões é feita.

rahulnikhare
fonte
Isso funcionou para mim, onde o caminho foi expandido para C: \ Usuários \ <usuário> \ AppData \ Roaming \ postgresql \ pgpass.conf. Também desligar e ligar o servidor PostgreSQL pareceu ajudar.
Geodata
0

Se você estiver executando o postgresql no mac os, tente o seguinte :

  1. Edite o arquivo pg_hba.conf

  2. sudo vi /Library/PostgreSQL/9.2/data/pg_hba.conf

  3. Altere o método "md5" para que todos os usuários "confiem" na parte inferior do arquivo

  4. Encontre o nome do serviço

  5. ls / Library / LaunchDaemons

  6. Procure pelo postgresql

  7. Pare o serviço postgresql

  8. sudo launchctl stop com.edb.launchd.postgresql-9.2

  9. Inicie o serviço postgresql

  10. sudo launchctl start com.edb.launchd.postgresql-9.2

  11. Inicie a sessão do psql como postgres

  12. psql -U postgres

  13. (não deve pedir senha devido à configuração de 'confiança')

  14. Redefina a senha na sessão psql digitando

  15. ALTER USUÁRIO postgres com a senha 'secure-new-password';

  16. \ q
  17. entrar

  18. Edite o arquivo pg_hba.conf

  19. Volte para 'md5'

  20. Reinicie os serviços novamente

David
fonte
-1

Isto é o que funcionou para mim no Windows:

Edite o arquivo pg_hba.conf localizado em C: \ Arquivos de Programas \ PostgreSQL \ 9.3 \ data.

# IPv4 local connections: host all all 127.0.0.1/32 trust

Altere o método de trust para md5 e reinicie o serviço postgres no Windows.

Depois disso, você pode fazer login usando o usuário do postgres sem senha usando o pgadmin. Você pode alterar a senha usando Arquivo-> Alterar senha.

Se o usuário do postgres não tiver privilégios de superusuário, você não poderá alterar a senha. Nesse caso, efetue login com outro usuário (pgsql) com acesso de superusuário e forneça privilégios a outros usuários clicando com o botão direito do mouse em usuários e selecionando properties-> Privilégios de função.

Chetan
fonte