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