Sigue leyendo, las mejores opciones son las últimas . Pero aclaremos un par de cosas primero.
Solo silenciar la solicitud de contraseña
Si su problema es solo la solicitud de contraseña, puede silenciarlo. Cito el manual aquí:
-w
--no-password
Nunca emita una solicitud de contraseña. Si el servidor requiere autenticación de contraseña y una contraseña no está disponible por otros medios, como .pgpass
archivo, el intento de conexión fallará. Esta opción puede ser útil en trabajos por lotes y secuencias de comandos donde no hay ningún usuario presente para ingresar una contraseña. (...)
Probablemente no necesites una contraseña
Normalmente esto es innecesario. El superusuario predeterminado de la base de datos postgres
suele corresponder al usuario del sistema del mismo nombre. Ejecutando psql
de esta cuenta no requiere una contraseña si el método de autenticación peer
o ident
están configurados en su pg_hba.conf
expediente. Probablemente tengas una línea como esta:
local all postgres peer
Y normalmente también:
local all all peer
Esto significa que cada local el usuario puede iniciar sesión en todos base de datos como usuario de la base de datos del mismo nombre sin contraseña.
Sin embargo , hay un error común aquí. Citando de nuevo:
Este método solo es compatible con conexiones locales .
Énfasis en negrita mío.
Te estás conectando a localhost
, que no es una "conexión local" , aunque tenga la palabra "local". Es una conexión TCP/IP a 127.0.0.1. Wikipedia en host local:
En los sistemas informáticos modernos, localhost
como un nombre de host se traduce a una dirección IPv4 en el 127.0.0.0/8
(bucle invertido) bloque de red, normalmente 127.0.0.1
, o ::1
en IPv6.
Solución sencilla para conexiones locales
Omita el parámetro -h
desde el psql
invocación. Citando el manual en psql
una vez más:
Si omite el nombre de host, psql se conectará a través de un socket de dominio Unix a un servidor en el host local, o a través de TCP/IP a localhost
en máquinas que no tienen sockets de dominio Unix.
Ventanas
... no tiene sockets de dominio Unix, pg_hba.conf
líneas que comienzan con local
no son aplicables en Windows. En Windows te conectas a través de localhost
por defecto, lo que nos lleva de vuelta al principio.
Si sus requisitos de seguridad son poco estrictos, puede confiar en todas las conexiones a través de localhost
:
host all all 127.0.0.1/32 trust
Solo haría eso para depurar con conexiones remotas desactivadas. Para mayor seguridad, puede usar la autenticación SSPI en Windows. Agregue esta línea a pg_hba.conf
para conexiones "locales":
host all all 127.0.0.1/32 sspi
Si realmente necesita una contraseña
podrías establecer una variable de entorno , pero esto está desaconsejado , especialmente para Windows. El manual:
PGPASSWORD
se comporta igual que el parámetro de conexión de contraseña. No se recomienda el uso de esta variable de entorno por razones de seguridad, ya que algunos sistemas operativos permiten a los usuarios que no son root ver las variables de entorno del proceso a través de ps; en su lugar, considere usar ~/.pgpass
archivo (consulte la Sección 32.15).
El manual en psql
:
Un conninfo
string es una alternativa para especificar parámetros de conexión:
$ psql "user=myuser password=secret_pw host=localhost port=5432 sslmode=require"
O un URI , que se utiliza en lugar de un nombre de base de datos:
$ psql postgresql://myuser:[email protected]:5432/mydb?sslmode=require
Archivo de contraseña
Pero normalmente es preferible configurar un .pgpass
archivo en lugar de poner contraseñas en archivos de secuencias de comandos.
Lea atentamente el breve capítulo del manual. En particular, tenga en cuenta que aquí...
Un nombre de host de localhost
coincide con TCP (nombre de host localhost
) y socket de dominio Unix (pghost
vacío o el directorio de socket predeterminado) conexiones provenientes de la máquina local.
La ruta exacta depende del sistema. Este archivo puede almacenar contraseñas para múltiples combinaciones de función y puerto (clúster de base de datos):
localhost:5432:*:myadmin:myadminPasswd
localhost:5434:*:myadmin:myadminPasswd
localhost:5437:*:myadmin:myadminPasswd
...
En Windows las máquinas buscan el archivo en:
%APPDATA%\postgresql\pgpass.conf
%APPDATA%
normalmente se resuelve en:C:\Documents and Settings\My_Windows_User_Name\Application Data\
.