-- Conéctate como superusuario (p. ej. 'postgres'):
-- sudo -u postgres psql
-- 1) Base de datos
CREATE DATABASE lease;
-- 2) Roles base
CREATE ROLE lease_owner NOLOGIN;
CREATE ROLE lease_migrator LOGIN PASSWORD 'cambia_esta_contra_segura';
CREATE ROLE lease_app LOGIN PASSWORD 'cambia_esta_contra_muy_segura';
-- 3) Darle poder al migrator para asumir ownership cuando lo necesite
GRANT lease_owner TO lease_migrator;
-- 4) Dentro de la base 'lease', crea el esquema y asigna dueños
ALTER ROLE lease_app SET search_path TO app;
\c lease
-- Evita usar 'public' para objetos de negocio; crea un esquema dedicado
CREATE SCHEMA app AUTHORIZATION lease_owner;
-- (opcional) bloquear 'public' para que nadie cree cosas ahí
REVOKE CREATE ON SCHEMA public FROM PUBLIC;
REVOKE ALL ON DATABASE lease FROM PUBLIC;
GRANT CONNECT ON DATABASE lease TO lease_app, lease_migrator;
-- 5) Permisos de uso del esquema a los usuarios que lo necesitan
GRANT USAGE ON SCHEMA app TO lease_app, lease_migrator;
-- 6) Permisos actuales sobre objetos ya existentes (si existieran)
-- (si no hay objetos aún, no pasa nada malo)
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA app TO lease_app;
GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA app TO lease_app;
-- 7) Permisos por DEFECTO para futuros objetos creados por el OWNER
-- (muy importante para que tu app no se quede sin permisos en tablas nuevas)
ALTER DEFAULT PRIVILEGES FOR ROLE lease_owner IN SCHEMA app
GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO lease_app;
ALTER DEFAULT PRIVILEGES FOR ROLE lease_owner IN SCHEMA app
GRANT USAGE, SELECT ON SEQUENCES TO lease_app;
ALTER DEFAULT PRIVILEGES FOR ROLE lease_migrator IN SCHEMA app
GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO lease_app;
ALTER DEFAULT PRIVILEGES FOR ROLE lease_migrator IN SCHEMA app
GRANT USAGE, SELECT ON SEQUENCES TO lease_app;
ALTER DEFAULT PRIVILEGES FOR ROLE lease_migrator IN SCHEMA app
GRANT EXECUTE ON FUNCTIONS TO lease_app;
-- Opcional: si tu app necesita crear tablas temporales
GRANT TEMP ON DATABASE lease TO lease_app;