Mi respuesta es similar a esta en ServerFault.com .
Ser conservador
Si desea ser más conservador que otorgar "todos los privilegios", es posible que desee probar algo más parecido a estos.
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO some_user_;
GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA public TO some_user_;
El uso de public
allí se refiere al nombre del esquema predeterminado creado para cada nueva base de datos / catálogo. Reemplácelo con su propio nombre si creó un esquema.
Acceso al esquema
Para acceder a un esquema, para cualquier acción, el usuario debe tener derechos de "uso". Antes de que un usuario pueda seleccionar, insertar, actualizar o eliminar, primero se le debe otorgar "uso" a un esquema.
No notará este requisito cuando utilice Postgres por primera vez. De forma predeterminada, cada base de datos tiene un primer esquema denominado public
. Y a cada usuario de forma predeterminada se le han otorgado automáticamente derechos de "uso" para ese esquema en particular. Al agregar un esquema adicional, debe otorgar derechos de uso explícitamente.
GRANT USAGE ON SCHEMA some_schema_ TO some_user_ ;
Extracto del documento de Postgres :
Para los esquemas, permite el acceso a los objetos contenidos en el esquema especificado (suponiendo que también se cumplan los requisitos de privilegios propios de los objetos). Esencialmente, esto permite al beneficiario "buscar" objetos dentro del esquema. Sin este permiso, todavía es posible ver los nombres de los objetos, por ejemplo, consultando las tablas del sistema. Además, después de revocar este permiso, los backends existentes pueden tener declaraciones que hayan realizado esta búsqueda anteriormente, por lo que esta no es una forma completamente segura de evitar el acceso a objetos.
Para obtener más información, consulte la pregunta: ¿Qué hace exactamente el USO DE SUBVENCIONES EN EL ESQUEMA? . Preste especial atención a la respuesta del experto de Postgres Craig Ringer .
Objetos existentes versus futuro
Estos comandos solo afectan a los objetos existentes. Las tablas y demás que cree en el futuro obtienen privilegios predeterminados hasta que vuelva a ejecutar las líneas anteriores. Vea la otra respuesta de Erwin Brandstetter para cambiar los valores predeterminados que afectan a los objetos futuros.