PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Execute o arquivo em lote com o comando psql sem senha


Continue lendo, as melhores opções vêm por último . Mas vamos esclarecer algumas coisas primeiro.

Silenciar apenas a solicitação de senha


Se o seu problema for apenas o prompt de senha, você poderá silenciá-lo. Cito o manual aqui:

-w
--no-password

Nunca emita um prompt de senha. Se o servidor exigir autenticação de senha e uma senha não estiver disponível por outros meios, como .pgpass arquivo, a tentativa de conexão falhará. Essa opção pode ser útil em tarefas em lote e scripts em que nenhum usuário está presente para inserir uma senha. (...)

Você provavelmente não precisa de uma senha


Normalmente isso é desnecessário. O superusuário de banco de dados padrão postgres geralmente corresponde ao usuário do sistema com o mesmo nome. Executando o psql desta conta não requer uma senha se o método de autenticação peer ou ident estão definidos em seu pg_hba.conf Arquivo. Você provavelmente tem uma linha como esta:
local    all    postgres    peer

E geralmente também:
local    all    all         peer

Isso significa que cada local o usuário pode fazer login em todos banco de dados como usuário do banco de dados com o mesmo nome sem senha.
No entanto , há um equívoco comum aqui. Citando novamente:

Este método é compatível apenas com conexões locais .

A ênfase em negrito é minha.
Você está se conectando a localhost , que não é uma "conexão local" , embora contenha a palavra "local". É uma conexão TCP/IP para 127.0.0.1. Wikipedia no localhost:

Em sistemas de computador modernos, localhost como um nome de host se traduz em um endereço IPv4 no 127.0.0.0/8 (loopback) bloco de rede, geralmente 127.0.0.1 , ou ::1 em IPv6.

Solução simples para conexões locais


Omita o parâmetro -h do psql invocação. Citando o manual sobre psql mais uma vez:

Se você omitir o nome do host, o psql se conectará através de um soquete de domínio Unix para um servidor no host local ou via TCP/IP para localhost em máquinas que não possuem soquetes de domínio Unix.

Janelas


... não possui soquetes de domínio Unix, pg_hba.conf linhas começando com local não são aplicáveis ​​no Windows. No Windows, você se conecta via localhost por padrão, o que nos traz de volta ao início.

Se seus requisitos de segurança forem negligentes, você pode confiar em todas as conexões via localhost :
host    all    all    127.0.0.1/32     trust

Eu só faria isso para depuração com conexões remotas desligadas. Para um pouco mais de segurança, você pode usar a autenticação SSPI no Windows. Adicione esta linha ao pg_hba.conf para conexões "locais":
host    all    all    127.0.0.1/32     sspi

Se você realmente precisa de uma senha


Você poderia defina uma variável de ambiente , mas isso é desencorajado , especialmente para Windows. O manual:

PGPASSWORD se comporta da mesma forma que o parâmetro de conexão de senha. O uso desta variável de ambiente não é recomendado por motivos de segurança, pois alguns sistemas operacionais permitem que usuários não root vejam as variáveis ​​de ambiente do processo via ps; em vez disso, considere usar o ~/.pgpass arquivo (consulte a Seção 32.15).

O manual sobre psql :

Uma conninfo string é uma alternativa para especificar parâmetros de conexão:
 $ psql "user=myuser password=secret_pw host=localhost port=5432 sslmode=require"

Ou um URI , que é usado em vez de um nome de banco de dados:
 $ psql postgresql://myuser:[email protected]:5432/mydb?sslmode=require

Arquivo de senha


Mas geralmente é preferível configurar um .pgpass arquivo em vez de colocar senhas em arquivos de script.
Leia atentamente o pequeno capítulo do manual. Em particular, note que aqui ...

Um nome de host de localhost corresponde tanto ao TCP (nome do host localhost ) e soquete de domínio Unix (pghost vazio ou o diretório de soquete padrão) provenientes da máquina local.

O caminho exato depende do sistema. Este arquivo pode armazenar senhas para várias combinações de função e porta (cluster de banco de dados):
localhost:5432:*:myadmin:myadminPasswd
localhost:5434:*:myadmin:myadminPasswd
localhost:5437:*:myadmin:myadminPasswd
...

No Windows máquinas procuram o arquivo em:
%APPDATA%\postgresql\pgpass.conf

%APPDATA% normalmente resolve para:C:\Documents and Settings\My_Windows_User_Name\Application Data\ .