<!-- 9 -->
<div class="img zoomable">
  <img src="/static/source_imgs/postgresql/post_2/crud_psql.webp" alt="" style="height: 320px; width: auto;">
</div>
<p>
  Para crear un usuario en PostgreSQL que pueda realizar operaciones <a class="link" data-bs-toggle="modal"
    data-bs-target="#CRUD">CRUD</a> en todas las tablas de una base de datos específica, sigue estos pasos:
</p>

<p><b>1. Acceder a PostgreSQL como superusuario</b><br>Abrimos una terminal y accedemos a PostgreSQL:</p>

{% set i %}
sudo -u postgres psql
{% endset %}
{% with codigo=i.strip() %}
{% include 'components/copy-code.html' %}
{% endwith %}

<p><b>2. Crear el usuario</b><br>Creamos un usuario con una contraseña:</p>

{% set ii %}
CREATE USER testusr WITH PASSWORD 'test1991';
{% endset %}
{% with codigo=ii.strip(), isEditable="true" %}
{% include 'components/copy-code.html' %}
{% endwith %}

<p><b>3. Conceder acceso a la base de datos</b><br>Damos acceso al usuario para que pueda conectarse a la base de datos:
</p>

{% set iii %}
GRANT CONNECT ON DATABASE db_test TO testusr;
{% endset %}
{% with codigo=iii.strip(), isEditable="true" %}
{% include 'components/copy-code.html' %}
{% endwith %}

<p><b>4. Otorgar permisos sobre el esquema public</b><br>Primero, nos conectamos a la base de datos y damos permisos
  sobre el esquema:</p>

{% set iv %}
\c db_test;
GRANT USAGE ON SCHEMA public TO testusr;
GRANT CREATE ON SCHEMA public TO testusr;
{% endset %}
{% with codigo=iv.strip(), isEditable="true" %}
{% include 'components/copy-code.html' %}
{% endwith %}

<p>5. Conceder permisos en tablas y secuencias existentes <br>Otorgamos permisos CRUD sobre todas las tablas y acceso a
  secuencias existentes:</p>

{% set v %}
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO testusr;
GRANT USAGE, SELECT, UPDATE ON ALL SEQUENCES IN SCHEMA public TO testusr;	
{% endset %}
{% with codigo=v.strip(), isEditable="true" %}
{% include 'components/copy-code.html' %}
{% endwith %}

<p><b>6. Conceder permisos para futuras tablas y secuencias</b><br>Para asegurarnos de que los objetos creados en el
  futuro también sean accesibles por testusr:</p>

{% set vi %}
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO testusr;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT USAGE, SELECT, UPDATE ON SEQUENCES TO testusr;
{% endset %}
{% with codigo=vi.strip(), isEditable="true" %}
{% include 'components/copy-code.html' %}
{% endwith %}

<p><b>7. Salir de psql</b></p>

{% set vii %}
\q
{% endset %}
{% with codigo=vii.strip(), isEditable="true" %}
{% include 'components/copy-code.html' %}
{% endwith %}

<p><b>8. Probar la conexión con el nuevo usuario</b><br>Antes de conectarnos, debemos conocer la IP del servidor de base
  de datos. Si el servidor está en el mismo equipo, la IP será 127.0.0.1: <br>
  # psql -U testusr -d db_test -h localhost (te pedirá la contraseña por lo que deberás ingresarla)
  psql -U testusr -d db_test -h 127.0.0.1
</p>

{% set viii %}
psql -U testusr -d db_test -h 127.0.0.1
{% endset %}
{% with codigo=viii.strip(), isEditable="true" %}
{% include 'components/copy-code.html' %}
{% endwith %}