Para poder habilitar que el usuario se conecte y que se le requiera su contraseña necesitaremos modificar el archivo pg_hba.conf el cual se encuentra en la ruta /etc/postgresql/[psql_version]/main/, para este ejemplo práctico usaré la version 16, por lo tanto para editar el archivo debes ejecutar el siguiente comando con sudo y usaré el editor de nano:

{% set i %} sudo nano /etc/postgresql/16/main/pg_hba.conf {% endset %} {% with codigo=i.strip(), isEditable="true" %} {% include 'components/copy-code.html' %} {% endwith %}

Te recomiendo que siempre hagas una copia del archivo original.
El contenido de las últimas 15 filas del archivo pg_hba.conf debe ser muy similar al siguiente:

{% set ii %} # Database administrative login by Unix domain socket local all postgres peer # TYPE DATABASE USER ADDRESS METHOD # "local" is for Unix domain socket connections only local all all peer # IPv4 local connections: host all all 127.0.0.1/32 scram-sha-256 # IPv6 local connections: host all all ::1/128 scram-sha-256 # Allow replication connections from localhost, by a user with the # replication privilege. local replication all peer host replication all 127.0.0.1/32 scram-sha-256 host replication all ::1/128 scram-sha-256 {% endset %} {% with codigo=ii.strip() %}{% include 'components/copy-code.html' %}{% endwith %}

Nos movemos hasta las línea que dicen:

{% set iii %} # "local" is for Unix domain socket connections only local all all peer {% endset %} {% with codigo=iii.strip() %}{% include 'components/copy-code.html' %}{% endwith %}

Vamos a comentar la segunda línea del código anterior para ello necesitamos añadir el prefijo '#' en la linea, yo suelo añadir al final otro signo '#'' y poner una pequeña nota de cuando la modifiqué, tambien añadiremos una tercera linea donde indicaremos que todos los usuarios que se intenten conectar a la base de datos se deberan autenticar por medio de contraseña.

{% set iv %} # "local" is for Unix domain socket connections only #local all all peer # 23.04.2024 13:14 hrs dix mod local all all md5 {% endset %} {% with codigo=iv.strip() %}{% include 'components/copy-code.html' %}{% endwith %}

Diferencia en claves:
- peer: la autenticación basada en el nombre de usuario del sistema operativo.
- md5: la autenticación basada en contraseña almacenada en formato MD5 para el usuario específico `postgres`.
En resumen, la elección entre `peer` y `md5` depende de cómo deseas gestionar la autenticación de los usuarios locales en PostgreSQL: si prefieres que se autentiquen automáticamente utilizando su nombre de usuario del sistema operativo (`peer`) o si deseas que proporcionen una contraseña específica (`md5`).

Luego nos vamos a las líneas:

{% set v %} # IPv6 local connections: host all all ::1/128 scram-sha-256 {% endset %} {% with codigo=v.strip() %}{% include 'components/copy-code.html' %}{% endwith %}

Del código anterior comentamos la segunda linea y añadimos una tercera línea que requiera que el usuario se auntentifique cada que se conecte al servidor de la base de datos:

{% set vi %} # IPv6 local connections: #host all all ::1/128 scram-sha-256 # 23.04.2024 13:14 hrs dix mod host all all 0.0.0.0/0 md5 {% endset %} {% with codigo=vi.strip() %}{% include 'components/copy-code.html' %}{% endwith %}

Para guardar todos los cambios realizados en nano debes de oprimir la combinación de teclas CTRL + s y para cerrar el editor oprime la combinación de teclas CTRL + x.

Finalmente para aplicar cambios debemos ejecutar el comando:

{% set vii %} sudo service postgresql restart {% endset %} {% with codigo=vii.strip() %}{% include 'components/copy-code.html' %}{% endwith %}