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