sql >> Base de Datos >  >> RDS >> PostgreSQL

Cómo otorgar todos los privilegios en las vistas a un usuario arbitrario

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...