Hai trovato la scorciatoia per impostare i privilegi per tutti gli esistenti tabelle nello schema indicato. Il manuale chiarisce:
(ma nota che ALL TABLES è considerato includere viste e tabelle straniere ).
Enfasi in grassetto mio. serial le colonne sono implementate con nextval() su una sequenza come default di colonna e, citando il manuale:
Per le sequenze, questo privilegio consente l'uso del currval e nextval funzioni.
Quindi se ci sono serial colonne, dovrai anche concedere USAGE (o ALL PRIVILEGES ) su sequenze
GRANT USAGE ON ALL SEQUENCES IN SCHEMA foo TO mygrp;
Nota:le colonne di identità in Postgres 10 o versioni successive utilizzano sequenze implicite che non richiedono privilegi aggiuntivi. (Considera l'aggiornamento di serial colonne.)
E le nuove oggetti?
Ti interesseranno anche DEFAULT PRIVILEGES per utenti o schemi:
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 ...;
Questo imposta automaticamente i privilegi per gli oggetti creati in futuro, ma non per gli oggetti preesistenti.
I privilegi predefiniti sono solo applicato agli oggetti creati dall'utente di destinazione (FOR ROLE my_creating_role ). Se tale clausola viene omessa, per impostazione predefinita l'utente corrente esegue ALTER DEFAULT PRIVILEGES . Per essere espliciti:
ALTER DEFAULT PRIVILEGES FOR ROLE my_creating_role IN SCHEMA foo GRANT ...;
ALTER DEFAULT PRIVILEGES FOR ROLE my_creating_role IN SCHEMA foo REVOKE ...;
Nota anche che tutte le versioni di pgAdmin III hanno un bug sottile e visualizza privilegi predefiniti nel riquadro SQL, anche se non si applicano al ruolo corrente. Assicurati di regolare il FOR ROLE clausola manualmente durante la copia dello script SQL.