Está en la página 1de 4

Correción instrucción errónea en el vídeo:

Donde en las instrucciones dice:

GRANT SELECT ON ALL TABLES IN SCHEMA esquema1 TO db1_admin1;


Debería ser:

GRANT ALL ON ALL TABLES IN SCHEMA esquema1 TO db1_admin;


Al final del video hay un error. Cuando se ejecuta:

\dp esquema1.*
La pantalla debería mostrar:

db1=# \dp esquema1.*


Access privileges
Schema | Name | Type | Access privileges | Column privileges | Policies
----------+--------+-------+----------------------------+-------------------
+----------
esquema1 | tabla1 | table | postgres=arwdDxt/postgres +| |
| | | db1_admin=arwdDxt/postgres+| |
| | | db1_ro=r/postgres +| |
| | | db1_rw=arwd/postgres | |
esquema1 | tabla2 | table | postgres=arwdDxt/postgres +| |
| | | db1_admin=arwdDxt/postgres+| |
| | | db1_ro=r/postgres +| |
| | | db1_rw=arwd/postgres | |
(2 rows)
Es decir, que cambia la parte de "db1_admin=r" en el video a "db1_admin=arwdDxt"
que es lo correcto.

Solución Reto: Securización SQL de bases de datos,


esquemas y tablas
$ vagrant destroy

Emplea siempre el cliente de línea de comando (psql) para esto. Recuerda que la
forma más sencilla es conectarte a la instancia vagrant:

$ vagrant ssh

Hacerte usuario postgres:

$ sudo su - postgres

Y llamar al comando:
$ psql

NOTA1: Necesitarás emplear la documentación de PostgreSQL para los


comandos CREATE DATABASE, CREATE SCHEMA, CREATE TABLE, CREATE
ROLE, GRANT y _REVOK_E para la versión 9.6.
Consulta https://www.postgresql.org/docs/9.6/static/sql.html

NOTA2: Por defecto el comando psql sin argumentos se conecta como


rol ‘postgres’ a la base de datos ‘postgres’. Una vez hayas creado la base de
datos ‘db1’, consulta la ayuda con el comando ‘?’ para ver cómo conectarte
a ‘db1’ para crear esquemas y tablas.

Solución:

1. Crear una base de datos llamada ‘db1’ con los privilegios por defecto.

postgres=# CREATE DATABASE db1;

2. En la base de datos ‘db1’, crear un esquema llamado ‘esquema1’ con los


privilegios por defecto.

postgres=# \c db1
db1=# CREATE SCHEMA esquema1;

3. En la base de datos ‘db1’, esquema ‘esquema1’ crear una tabla


llamada ‘tabla1’ con una sola columna llamada ‘id’, de tipo entero, que sea la
clave primaria.

db1=# CREATE TABLE esquema1.tabla1 (id1 INTEGER PRIMARY KEY);

4. Una vez creado estos esquemas de datos, necesitamos tres roles


llamados ‘db1_admin’, ‘db1_ro’ y ‘db_rw’. Su contraseña debe ser ‘miclave’.

db1=# CREATE ROLE db1_admin WITH LOGIN PASSWORD 'miclave';


db1=# CREATE ROLE db1_ro WITH LOGIN PASSWORD 'miclave';
db1=# CREATE ROLE db1_rw WITH LOGIN PASSWORD 'miclave';

Ahora necesitamos conseguir los siguientes objetivos:

5. Por defecto, nadie debe poder efectuar ninguna acción sobre la base de
datos ‘db1’

db1=# REVOKE ALL ON DATABASE db1 FROM PUBLIC;


6. Además, incluso los roles a los que proporcionemos acceso a alguna de las
bases de datos, no deben poder crear tablas en el esquema public

db1=# REVOKE CREATE ON SCHEMA esquema1 FROM PUBLIC;

7. El rol ‘db1_admin’ debe poder conectarse a ‘db1’, y además crear esquemas.

db1=# GRANT CONNECT, CREATE ON DATABASE db1 TO db1_admin;

8. Los roles ‘db1_ro’ y ‘db1_rw’ deben poder conectarse a la base de


datos ‘db1’.

db1=# GRANT CONNECT ON DATABASE db1 TO db1_ro;


db1=# GRANT CONNECT ON DATABASE db1 TO db1_rw;

9. El rol ‘db1_admin’ debe poder efectuar cualquier acción sobre las tablas del


esquema ‘esquema1’ de la base de datos ‘db1’.

db1=# GRANT ALL ON SCHEMA esquema1 TO db1_admin;


db1=# GRANT ALL ON ALL TABLES IN SCHEMA esquema1 TO db1_admin;

10. El rol ‘db1_ro’ debe poder únicamente leer datos de las tablas del en el


esquema ‘esquema1’ de la base de datos ‘db1’

db1=# GRANT SELECT ON ALL TABLES IN SCHEMA esquema1 TO db1_ro;

11. El rol ‘db1_rw’ debe poder seleccionar, insertar, actualizar y borrar dato en


todas las tablas del esquema ‘esquema1’ de la base de datos ‘db1’

db1=# GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA esquema1
TO db1_rw;

12. Todas las futuras tablas del esquema esquema1 deben reflejar los permisos
de los pasos 9, 10 y 11.

db1=# ALTER DEFAULT PRIVILEGES IN SCHEMA esquema1 GRANT ALL ON TABLES TO


db1_admin;
db1=# ALTER DEFAULT PRIVILEGES IN SCHEMA esquema1 GRANT SELECT ON TABLES TO
db1_ro;
db1=# ALTER DEFAULT PRIVILEGES IN SCHEMA esquema1 GRANT SELECT, INSERT,
UPDATE, DELETE ON TABLES TO db1_rw;

13. En la base de datos ‘db1’, esquema ‘esquema1’ crear una tabla


llamada ‘tabla2’ con una sola columna llamada ‘id’, de tipo entero, que sea la
clave primaria.

db1=# CREATE TABLE esquema1.tabla2 (id1 INTEGER PRIMARY KEY);


14. Comprueba los permisos de la esquema1.tabla2 ¿son iguales que los de la
tabla esquema1.tabla1?

db1=# \dp esquema.*

También podría gustarte