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

Otorgue todo en un esquema específico en la base de datos a un rol de grupo en PostgreSQL

Encontraste la abreviatura para establecer privilegios para todos los existentes tablas en el esquema dado. El manual aclara:

(pero tenga en cuenta que ALL TABLES se considera que incluye vistas y tablas extranjeras ).

Énfasis en negrita mío. serial las columnas se implementan con nextval() en una secuencia como columna predeterminada y, citando el manual:

Para secuencias, este privilegio permite el uso de currval y nextval funciones.

Entonces, si hay serial columnas, también querrá conceder USAGE (o ALL PRIVILEGES ) en secuencias

GRANT USAGE ON ALL SEQUENCES IN SCHEMA foo TO mygrp;

Nota:las columnas de identidad en Postgres 10 o posterior usan secuencias implícitas que no requieren privilegios adicionales. (Considere actualizar serial columnas.)

¿Qué pasa con nuevo? objetos?

También te interesarán los DEFAULT PRIVILEGES para usuarios o esquemas:

ALTER DEFAULT PRIVILEGES IN SCHEMA foo GRANT ALL PRIVILEGES ON TABLES TO staff;
ALTER DEFAULT PRIVILEGES IN SCHEMA foo GRANT USAGE          ON SEQUENCES TO staff;
ALTER DEFAULT PRIVILEGES IN SCHEMA foo REVOKE ...;

Esto establece privilegios para objetos creados en el futuro automáticamente, pero no para objetos preexistentes.

Los privilegios predeterminados son solo aplicado a los objetos creados por el usuario objetivo (FOR ROLE my_creating_role ). Si se omite esa cláusula, por defecto el usuario actual ejecuta ALTER DEFAULT PRIVILEGES . Para ser explícito:

ALTER DEFAULT PRIVILEGES FOR ROLE my_creating_role IN SCHEMA foo GRANT ...;
ALTER DEFAULT PRIVILEGES FOR ROLE my_creating_role IN SCHEMA foo REVOKE ...;

Tenga en cuenta también que todas las versiones de pgAdmin III tienen un error sutil y display privilegios predeterminados en el panel SQL, incluso si no se aplican al rol actual. Asegúrese de ajustar el FOR ROLE cláusula manualmente al copiar el script SQL.