<!-- 10 -->
<div class="img zoomable">
  <img src="/static/source_imgs/postgresql/post_3/psql1.webp" alt="" style="height: 350px; width: auto;">
</div>
<p>
  Para poder habilitar que el usuario se conecte y que se le requiera su contraseña necesitaremos modificar el archivo
  <b>pg_hba.conf</b> el cual se encuentra en la ruta <b>/etc/postgresql/<a class="link" data-bs-toggle="modal"
      data-bs-target="#psql_version">[psql_version]</a>/main/</b>, para este
  ejemplo práctico usaré la version 16, por lo tanto para editar el archivo debes ejecutar el siguiente comando con <a
    class="link" data-bs-toggle="modal" data-bs-target="#sudo">sudo</a> y usaré el editor de <a class="link"
    data-bs-toggle="modal" data-bs-target="#nano">nano</a>: <br>
</p>

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

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

{% 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 %}

<p>Nos movemos hasta las línea que dicen:</p>

{% 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 %}

<p>
  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.
</p>

{% 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 %}

<p>
  Diferencia en claves: <br>
  - peer: la autenticación basada en el nombre de usuario del sistema operativo. <br>
  - md5: la autenticación basada en contraseña almacenada en formato MD5 para el usuario específico `postgres`. <br>
  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`).
</p>
<p>Luego nos vamos a las líneas: </p>

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

<p>
  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:
</p>

{% 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 %}

<p>
  Para guardar todos los cambios realizados en nano debes de oprimir la combinación de teclas <b>CTRL + s</b> y para
  cerrar el editor oprime la combinación de teclas <b>CTRL + x</b>. <br><br>
  Finalmente para aplicar cambios debemos ejecutar el comando:
</p>

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