quando crio um novo usuário, mas ele não pode fazer login no banco de dados.
Eu faço assim:
postgres@Aspire:/home/XXX$ createuser dev
Shall the new role be a superuser? (y/n) n
Shall the new role be allowed to create databases? (y/n) y
Shall the new role be allowed to create more new roles? (y/n) y
então crie um banco de dados:
postgres@Aspire:/home/XXX$ createdb -O dev test_development
depois disso, tento psql -U dev -W test_development
fazer login, mas recebo o erro:
psql: FATAL: Peer authentication failed for user "dev"
Eu tentei resolver o problema, mas falhei.
postgresql
hsming
fonte
fonte
--interactive
ao comando:createuser --interactive joe
Respostas:
Experimentar:
Onde
-U
é o nome de usuário do banco de dados-h
é o nome do host / IP do servidor local, evitando soquetes de domínio Unix-d
é o nome do banco de dados ao qual se conectarIsso é avaliado como uma conexão de "rede" pelo Postgresql em vez de uma conexão de soquete de domínio Unix, portanto, não é avaliado como uma conexão "local", como você pode ver em
pg_hba.conf
:fonte
psql [option...] [dbname [username]]
, então você acha quepsql dbname username
seria apenas trabalho ..\c glossary john
FATAL: Peer authentication failed for user "john"
depois\c glossary john localhost
Password for user john:
SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off)
You are now connected to database "glossary" as user "john" on host "localhost" at port "5432".
funcionou.Sua conexão falhou porque, por padrão, se
psql
conecta por soquetes UNIX usandopeer
autenticação, o que exige que o usuário UNIX atual tenha o mesmo nome de usuáriopsql
. Portanto, você terá que criar o usuário UNIXdev
e, em seguida, efetuar login comodev
ou usarsudo -u dev psql test_development
para acessar o banco de dados (e nãopsql
deve solicitar uma senha).Se você não pode ou não deseja criar o usuário UNIX, como se você deseja apenas conectar-se ao seu banco de dados para consultas ad hoc , forçar uma conexão de soquete usando
psql --host=localhost --dbname=test_development --username=dev
(conforme indicado pela resposta do @meyerson) resolverá o seu problema imediato.Mas se você pretende forçar a autenticação de senha nos soquetes Unix em vez do método de mesmo nível, tente alterar a seguinte
pg_hba.conf
linha *:de
para
peer
significa que confiará na identidade (autenticidade) do usuário UNIX. Portanto, não solicitando uma senha.md5
significa que sempre solicitará uma senha e a validará após fazer o hash comMD5
.Obviamente, você também pode criar regras mais específicas para um banco de dados ou usuário específico, com alguns usuários tendo
peer
e outros exigindo senhas.Depois de mudar
pg_hba.conf
se o PostgreSQL está em execução, você precisará reler a configuração recarregando (pg_ctl reload
) ou reiniciando (sudo service postgresql restart
).* O arquivo
pg_hba.conf
provavelmente estará em/etc/postgresql/9.x/main/pg_hba.conf
Editado: Comentários de @Chloe, @JavierEH, @Jonas Eicher, @fccoelho, @Joanis, @Uphill_What comentários incorporados na resposta.
fonte
peer
ANDmd5
? Quando definomd5
, não consigo mais fazer login com opostgres
usuário! Tentei adicionar várias linhas e separar o método com vírgulas, mas elas não funcionaram. Ok, encontreimgoldwasser
a resposta e funcionou. Acabei de adicionar outra linha para o usuáriopostgres
com o métodopeer
!/var/lib/pgsql/9.4/data/pg_hba.conf
Autenticação por pares significa que o postgres solicita ao sistema operacional seu nome de login e o utiliza para autenticação. Para efetuar login como usuário "dev" usando autenticação de mesmo nível no postgres, você também deve ser o usuário "dev" no sistema operacional.
Você pode encontrar detalhes sobre os métodos de autenticação na documentação do Postgresql .
Dica: Se nenhum método de autenticação funcionar mais, desconecte o servidor da rede e use o método "trust" para "localhost" (e verifique novamente se o servidor não está acessível pela rede enquanto o método "trust" estiver ativado).
fonte
dev
para o usuário do sistemaXXX
Quando você especifica:
ele se conecta via soquete UNIX, que por padrão usa
peer
autenticação, a menos que especificado depg_hba.conf
outra forma.Você pode especificar:
para obter uma conexão TCP / IP na interface de loopback (IPv4 e IPv6) para as especificações
database
euser
.Após as alterações, você deve reiniciar o postgres ou recarregar sua configuração. Reinicie que deve funcionar em distros modernos baseados em RHEL / Debian:
Recarregar deve funcionar da seguinte maneira:
mas o comando pode diferir dependendo da configuração do PATH - você pode precisar especificar o caminho absoluto, que pode ser diferente, dependendo da maneira como o postgres foi instalado.
Então você pode usar:
para fazer login com o
user
especificadodatabase
em TCP / IP.md5
significa senha criptografada, enquanto você também pode especificarpassword
senhas em texto sem formatação durante a autorização. Essas 2 opções não devem ser muito importantes, desde que o servidor de banco de dados seja acessível apenas localmente, sem acesso à rede.Nota importante: a ordem das definições é
pg_hba.conf
importante - as regras são lidas de cima para baixo, como o iptables; portanto, você provavelmente deseja adicionar regras propostas acima da regra:fonte
Embora a resposta de @ flaviodesousa funcione, também torna obrigatório que todos os usuários (todos os outros) insiram uma senha.
Em algum momento, faz sentido manter a autenticação de colegas para todos os outros, mas abre uma exceção para um usuário do serviço. Nesse caso, você deseja adicionar uma linha ao pg_hba.conf que se parece com:
Eu recomendo que você adicione esta linha logo abaixo da linha do cabeçalho comentada:
Você precisará reiniciar o PostgreSQL usando
Se você estiver usando o 9.3, seu pg_hba.conf provavelmente será:
fonte
Isso funciona para mim quando eu o encontro:
fonte
dev
,.A solução mais fácil:
fonte
Eu simplesmente tive que adicionar
-h localhost
fonte
No meu caso, eu estava usando uma porta diferente. O padrão é 5432. Eu estava usando 5433. Isso funcionou para mim:
fonte
Para as pessoas no futuro vendo isso,
postgres
está no/usr/lib/postgresql/10/bin
meu servidor Ubuntu.Adicionei-o ao PATH no meu arquivo .bashrc e adicione esta linha no final
então na linha de comando
Atualizei meu ambiente do bash. Agora eu posso usar
postgres -D /wherever
de qualquer diretóriofonte
pg_dump -h localhost -U postgres -F c -b -v -f mydb.backup mydb
fonte
-U postgres
ser crucial? O que são todas essas cartas de traço , afinal?Experimentar:
psql -U role_name -d banco de dados -h hostname..com -W
fonte