PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Accorder tout sur un schéma spécifique dans la base de données à un rôle de groupe dans PostgreSQL

Vous avez trouvé le raccourci pour définir des privilèges pour tous les existants tables dans le schéma donné. Le manuel précise :

(mais notez que ALL TABLES est considéré comme incluant les vues et tables étrangères ).

Bold emphase mienne. serial les colonnes sont implémentées avec nextval() sur une séquence comme colonne par défaut et, en citant le manuel :

Pour les séquences, ce privilège permet l'utilisation de la currval et nextval fonctions.

Donc, s'il y a serial colonnes, vous voudrez également accorder USAGE (ou ALL PRIVILEGES ) sur les séquences

GRANT USAGE ON ALL SEQUENCES IN SCHEMA foo TO mygrp;

Remarque :les colonnes d'identité dans Postgres 10 ou version ultérieure utilisent des séquences implicites qui ne nécessitent pas de privilèges supplémentaires. (Envisagez de mettre à niveau serial colonnes.)

Qu'en est-il du nouveau ? objets ?

Vous serez également intéressé par les DEFAULT PRIVILEGES pour les utilisateurs ou les schémas :

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

Cela définit automatiquement les privilèges pour les objets créés ultérieurement, mais pas pour les objets préexistants.

Les privilèges par défaut sont seulement appliqué aux objets créés par l'utilisateur ciblé (FOR ROLE my_creating_role ). Si cette clause est omise, la valeur par défaut est l'utilisateur actuel qui exécute ALTER DEFAULT PRIVILEGES . Pour être explicite :

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

Notez également que toutes les versions de pgAdmin III ont un bogue subtil et un affichage privilèges par défaut dans le volet SQL, même s'ils ne s'appliquent pas au rôle actuel. Assurez-vous d'ajuster le FOR ROLE clause manuellement lors de la copie du script SQL.