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.