Como posso chamar o psql para que ele não solicite uma senha ?
Isto é o que eu tenho:
psql -Umyuser < myscript.sql
No entanto, não consegui encontrar o argumento que passa a senha e, portanto, o psql sempre solicita isso.
postgresql
psql
Axel Fontaine
fonte
fonte
Respostas:
Existem várias maneiras de autenticar no PostgreSQL. Você pode investigar alternativas à autenticação de senha em https://www.postgresql.org/docs/current/static/client-authentication.html .
Para responder à sua pergunta, existem algumas maneiras de fornecer uma senha para autenticação baseada em senha. A maneira óbvia é através do prompt de senha. Em vez disso, você pode fornecer a senha em um arquivo pgpass ou através da
PGPASSWORD
variável de ambiente. Veja estes:Não há opção para fornecer a senha como um argumento de linha de comando, porque essas informações geralmente estão disponíveis para todos os usuários e, portanto, inseguras. No entanto, em ambientes Linux / Unix, você pode fornecer uma variável de ambiente para um único comando como este:
fonte
fonte
Você pode adicionar esta linha de comando no início do seu script:
fonte
export PGPASSWORD=[password]
fez trabalho#!/bin/sh set PGPASSWORD = postgres psql -h 192.168.3.200 -U postgres incx_um << EOF DELETE FROM usrmgt.user_one_time_codes WHERE time < NOW() - INTERVAL '30 minute' EOF
PGPASSWORD=password
.Se você pretende ter vários hosts / conexões com o banco de dados, o arquivo ~ / .pgpass é o caminho a seguir.
Passos:
vim ~/.pgpass
ou similar. Insira suas informações no seguinte formato:hostname:port:database:username:password
Não adicione aspas em torno dos valores do seu campo. Você também pode usar * como um curinga para seus campos de porta / banco de dados.chmod 0600 ~/.pgpass
, para que não seja ignorado silenciosamente pelo psql.alias postygresy='psql --host hostname database_name -U username'
Os valores devem corresponder aos que você inseriu no arquivo ~ / .pgpass.. ~/.bashrc
ou similar.Observe que se você tiver um conjunto de variáveis PGPASSWORD = '' de exportação, ele terá precedência sobre o arquivo.
fonte
chmod 600
no arquivo, caso contráriopsql
o ignorará silenciosamente (de acordo com os documentos).Essa pode ser uma pergunta antiga, mas há um método alternativo que você pode usar e que ninguém mencionou. É possível especificar a senha diretamente no URI da conexão. A documentação pode ser encontrada aqui , ou aqui .
Você pode fornecer seu nome de usuário e senha diretamente no URI de conexão fornecido para
psql
:fonte
PGPASSWORD
Se você está tendo problemas no Windows como eu (estou usando o Windows 7 de 64 bits) e
set PGPASSWORD=[Password]
não funcionou.Então, como Kavaklioglu disse em um dos comentários,
Você precisará salvá-lo na parte superior do arquivo ou antes de qualquer uso, para que seja definido antes de ser chamado.
Certamente funciona no Windows :)
fonte
export PGPASSWORD=[password]
não funciona para mim usando a linha de comando (cmd.exe). Tem certeza de que não estava usando o cygwin ou algo semelhante?Você precisa criar um arquivo de senha: consulte http://www.postgresql.org/docs/9.0/interactive/libpq-pgpass.html para obter mais informações.
fonte
Dadas as preocupações de segurança sobre o uso da variável de ambiente PGPASSWORD, acho que a melhor solução geral é a seguinte:
Há alguns pontos de nota aqui. A Etapa 1 existe para evitar a sujeira no arquivo ~ / .pgpass do usuário que possa existir. Você também deve garantir que o arquivo tenha permissões 0600 ou menos.
Alguns sugeriram aproveitar o bash para atalho da seguinte maneira:
Isso usa a sintaxe <() para evitar a necessidade de gravar os dados em um arquivo real. Mas não funciona porque o psql verifica qual arquivo está sendo usado e gera um erro como este:
fonte
Isso pode ser feito simplesmente usando PGPASSWORD. Estou usando o psql 9.5.10. No seu caso, a solução seria
PGPASSWORD=password psql -U myuser < myscript.sql
fonte
Com base na resposta de mightybyte para aqueles que não se sentem confortáveis com o script * nix shell, aqui está um script de trabalho:
O cifrão duplo (
$$
) na/tmp/pgpasswd$$
linha 2 anexa o número do ID do processo ao nome do arquivo, para que este script possa ser executado mais de uma vez, mesmo simultaneamente, sem efeitos colaterais.Observe o uso do
chmod
comando na linha 4 - assim como o erro " não é um arquivo simples " descrito por mightybyte , também há um erro " permissões " se isso não for feito.Na linha 7, você não precisará usar o sinalizador
-h
myserver ,-p
myport ou-U
jdoe se usar os padrões ( localhost : 5432 ) e tiver apenas um usuário de banco de dados. Para vários usuários, (mas a conexão padrão) altere essa linha paraNão esqueça de tornar o script executável com
ATUALIZAR:
Eu segui o conselho de RichVel e tornei o arquivo ilegível antes de colocar a senha nele. Isso fecha um pequeno furo de segurança. Obrigado!
fonte
mktemp
para criar um arquivo temporário em vez de criar seu próprio esquema de nomenclatura. Ele cria um novo arquivo temporário (chamado algo como/tmp/tmp.ITXUNYgiNh
no Linux e/var/folders/xx/7gws2yy91vn9_t2lb8jcr2gr0000gn/T/tmp.QmbVOQk4
no MacOS X) e imprime seu nome em stdout.chmod 600
depois de criar o arquivo, mas antes de gravar a senha nele. Conforme escrito, um script mal-intencionado no servidor poderia tentar continuamente ler arquivos desse formato e, às vezes, conseguiria obter a senha. Além disso, se esse script for interrompido por algum motivo, o arquivo será deixado no disco - a gravação de umtrap
manipulador de shell resolveria isso. Dado que não é trivial escrever um script seguro como esse, recomendo o usoexport PGPASSWORD
.PGPASSWORD
foi descontinuado na 9.3.Uma alternativa ao uso da
PGPASSWORD
variável de ambiente é usar aconninfo
string de acordo com a documentaçãofonte
Você pode achar isso útil: Linha de comando do Windows PSQL: existe uma maneira de permitir o login sem senha?
fonte
8 anos depois ...
No meu mac, eu tive que colocar uma linha no arquivo
~/.pgpass
como:Veja também:
https://www.postgresql.org/docs/current/libpq-pgpass.html
https://wiki.postgresql.org/wiki/Pgpass
fonte
Acho que o psql mostra o prompt de senha, mesmo que você defina a variável PGPASSWORD, mas você pode especificar a opção -w para o psql omitir o prompt de senha.
fonte
Use -w no comando: psql -h localhost -p 5432 -U user -w
fonte