Cómo crear un usuario y otorgar permisos en PostgreSQL con GRANT
En PostgreSQL los usuarios son roles con login. Otorgar acceso a una tabla no basta: hay que dar permiso sobre el esquema y considerar los objetos que se crearán a futuro.
- 1
Crea el rol con contraseña
Un rol con LOGIN es lo que llamamos usuario. Define una contraseña fuerte y, si aplica, un límite de conexiones.
CREATE ROLE app_lectura WITH LOGIN PASSWORD 'cambia_esto' CONNECTION LIMIT 20; - 2
Da acceso a la base y al esquema
Sin USAGE sobre el esquema, el rol no ve las tablas aunque tenga permisos sobre ellas. Este es el paso que más se olvida.
GRANT CONNECT ON DATABASE ventas TO app_lectura; GRANT USAGE ON SCHEMA public TO app_lectura; - 3
Otorga permisos sobre las tablas actuales
GRANT sobre ALL TABLES aplica solo a las tablas que ya existen en el esquema en ese momento.
GRANT SELECT ON ALL TABLES IN SCHEMA public TO app_lectura; - 4
Cubre las tablas futuras con privilegios por defecto
ALTER DEFAULT PRIVILEGES asegura que las tablas creadas después también hereden el permiso, sin tener que repetir el GRANT.
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO app_lectura;
// el error común
Dar GRANT sobre las tablas existentes y olvidar ALTER DEFAULT PRIVILEGES: en cuanto alguien crea una tabla nueva, el usuario deja de poder leerla y aparece un error intermitente difícil de rastrear.
// cuándo conviene un experto
Si manejas varios equipos, esquemas y roles anidados, el modelo de permisos se vuelve fácil de romper y difícil de auditar. En dba.mx diseñamos esquemas de roles con mínimo privilegio y los dejamos documentados para que el acceso sea claro y seguro.
Agenda un Escaneo — desde USD $550Esta guía es orientativa y usa comandos de referencia. En producción, adapta a tu versión y prueba en un ambiente seguro primero.