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

Come concedere tutti i privilegi sulle viste a un utente arbitrario

Il motivo è che sono necessari privilegi aggiuntivi per accedere a una vista o a una tabella. I privilegi sul database non coprono l'accesso a tutti gli oggetti in esso contenuti.

È diverso con le funzioni:EXECUTE il privilegio è concesso a public per impostazione predefinita. Ma la funzione viene eseguita con i privilegi dell'utente corrente. Potresti essere interessato al SECURITY DEFINER modificatore per CREATE FUNCTION . Ma normalmente è sufficiente concedere SELECT sui tavoli coinvolti.

Per documentazione sui privilegi predefiniti:

A seconda del tipo di oggetto, i privilegi predefiniti iniziali potrebbero includere la concessione di alcuni privilegi a PUBLIC . L'impostazione predefinita non è accesso pubblico per tabelle, colonne, schemi e tablespace; CONNECT privilegio e TEMP privilegio di creazione tabelle per database; EXECUTE privilegio per funzioni; e USAGE privilegio per le lingue.

Potresti essere interessato a questo comando DDL (richiede Postgres 9.0 o successivo):

GRANT SELECT ON ALL TABLES IN SCHEMA public TO myuser;

Mentre è connesso al database in questione, ovviamente (vedi il commento di @marcel di seguito) e come utente con privilegi sufficienti. Potrebbe interessarti anche l'impostazione DEFAULT PRIVILEGES :

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

Risposta più dettagliata su come gestire i privilegi:

  • Come gestire i PRIVILEGI PREDEFINITI per gli UTENTI su un DATABASE vs SCHEMA?

pgAdmin ha una funzione per operazioni in blocco più sofisticate:

Oppure puoi interrogare i cataloghi di sistema per creare istruzioni DDL per la concessione/revoca in blocco...