El motivo es que necesita privilegios adicionales para acceder a una vista o tabla. Los privilegios en la base de datos no cubren el acceso a todos los objetos en ella.
Es diferente con las funciones:EXECUTE
el privilegio se otorga a public
por defecto. Pero la función se ejecuta con los privilegios del usuario actual. Puede que le interese el SECURITY DEFINER
modificador para CREATE FUNCTION
. Pero normalmente es suficiente para conceder SELECT
en las tablas involucradas.
Según la documentación sobre los privilegios predeterminados:
Dependiendo del tipo de objeto, los privilegios predeterminados iniciales pueden incluir otorgar algunos privilegios a PUBLIC
. El valor predeterminado es ningún acceso público para tablas, columnas, esquemas y espacios de tablas; CONNECT
privilegio y TEMP
privilegio de creación de tablas para bases de datos; EXECUTE
privilegio para funciones; y USAGE
privilegio para idiomas.
Puede estar interesado en este comando DDL (requiere Postgres 9.0 o posterior):
GRANT SELECT ON ALL TABLES IN SCHEMA public TO myuser;
Mientras esté conectado a la base de datos en cuestión, por supuesto (vea el comentario de @marcel a continuación), y como usuario con suficientes privilegios. También te puede interesar la configuración DEFAULT PRIVILEGES
:
- Otorgar todo en un esquema específico en la base de datos a un rol de grupo en PostgreSQL
Respuesta más detallada sobre cómo administrar los privilegios:
- ¿Cómo administrar PRIVILEGIOS POR DEFECTO para USUARIOS en una BASE DE DATOS vs ESQUEMA?
pgAdmin tiene una función para operaciones masivas más sofisticadas:
O puede consultar los catálogos del sistema para crear declaraciones DDL para otorgar/revocar de forma masiva...