PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Concedi tutto su uno schema specifico nel db a un ruolo di gruppo in PostgreSQL

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.