M09L19Semana 5~5 h
L19 — Least privilege (P3)
~5.0 h · Semana 5
El hilo de seguridad empieza aquí: la app no es dueña del clúster.
Objetivo
Aplicar migrations/003_roles_app.sql (ajustando password local) y completar roles.md.
Pasos
1. Lectura (40 min)
PG privileges — GRANT/REVOKE básicos.
2. Ajusta y aplica 003 (45 min)
Edita la password del CREATE ROLE con tu APP_DB_PASSWORD local. Aplica el SQL .
3. Prueba positiva (40 min)
psql "postgresql://agenda_app:${APP_DB_PASSWORD}@localhost:5432/agenda_ops" \
-c 'SELECT count(*) FROM citas;'
4. Prueba negativa (40 min)
DROP TABLE citas; -- debe fallar
CREATE TABLE hack(x int); -- debe fallar
Pega el error en roles.md.
5. Commit (20 min) — sin secretos
git add projects/m09-bases-datos/roles.md projects/m09-bases-datos/migrations/003_roles_app.sql
git commit -m "feat(m09): rol agenda_app least privilege"
Lectura de esta lección
| Fuente | Qué leer | Enlace |
|---|---|---|
| Fundamentos de BD — Elmasri & Navathe (ed. ES) | PG: roles / GRANT; Elmasri seguridad intro | Tutorial PostgreSQL |
| Catálogo | Entrada de esta materia | Bibliografía · M09 |
Hecho cuando
Marca la lección solo si:
- Existe rol
agenda_app(o equivalente) sin superuser. - Demuestras SELECT/INSERT OK y DDL denegado (error pegado en
roles.md). - README marca P3 listo.
Errores comunes
- App y migraciones con el mismo superuser.
- GRANT ALL TABLES TO PUBLIC.
- Password del rol app en el README.