sql >> Base de Datos >  >> RDS >> PostgreSQL

Ejecute el archivo por lotes con el comando psql sin contraseña

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\ .