Acessar postgres sem passar senha em texto via linha de comando (psql)

Acessar postgres sem passar senha em texto via linha de comando (psql)

Neste tutorial vamos apresentar uma maneira alternativa de acessar o postgres sem a necessidade de utilizar uma senha.

Ao tentar fazer o acesso via utilitário de linha de comando, temos a seguinte saída do terminal:

psql -U postgres
Password for user postgres:

No código acima, estamos tentando acessar o prompt de comando do sistema de gerenciamento banco de dados postgres. Ao tentar fazer o acesso vemos que o mesmo solicita uma senha. Esta senha foi configurada previamente, que eu também postei em outro tutorial. Veja aqui

O que desejamos fazer é acessar o prompt de comando diretamente sem a necessidade de utilizar credenciais para fazer o acesso.

Uma maneira de resolver este problema é colocando um arquivo oculto .pgpassno diretório $home do usuário.

Este arquivo deve possuir um padrão específico e o conteúdo deste arquivo deve seguir este formato:

hostname:port:database:username:password

Então supondo que estamos em uma instância (sistema operacional linux). Para fazer esta configuração devemos primeiramente criar o arquivo .pgpass para isso vamos utilizar o comando touch.

No terminal executar:

touch .pgpass

Repare que estamos colocando um ponto (".") que faz parte do nome do arquivo, isso é um requisito e significa que este é um arquivo oculto. Isso faz parte dos requisitos para este método funcionar.

Após criar o arquivo, devemos escrever o conteúdo do arquivo, para isso devemos seguir o padrão descrito na documentação. Para esta instância específica temos:

localhost:5432:nome_do_db:postgres:nãotenteadvinharminhasenha

Após isso basta tentar acessar o utilitário psql novamente:

psql

Ao tentar acessar, temos a seguinte mensagem:

WARNING: password file "/home/root/.pgpass" has group or world access; permissions should be u=rw (0600) or less

Este é uma mensagem de advertência, que mostra que o nível de acesso deste arquivo deve ser mais restrito (deve ser 0600), caso contrário ele é ignorado. Este é um comportamento documentado.

Então para mudar o nível de acesso do arquivo basta executar um chmod.

sudo chmod 0600 ~/.pgpass

Após executar este passos então será possível acessar a sua instância do sgbd diretamente sem a necessidade de uso de credenciais, pois elas já estão sendo utilizadas via arquivo .pgpass.

Referência: Documentação oficial