Anledningen är att du behöver ytterligare privilegier för att komma åt en vy eller tabell. Behörigheter på databasen täcker inte åtkomst till alla objekt i den.
Det är annorlunda med funktionerna:EXECUTE
privilegium ges till public
som standard. Men funktionen exekveras med den aktuella användarens privilegier. Du kanske är intresserad av SECURITY DEFINER
modifierare för CREATE FUNCTION
. Men normalt räcker det med att ge SELECT
på inblandade bord.
Enligt dokumentation om standardbehörigheter:
Beroende på typen av objekt kan de ursprungliga standardbehörigheterna innefatta att bevilja vissa privilegier till
PUBLIC
. Standard är ingen offentlig åtkomst för tabeller, kolumner, scheman och tabellutrymmen;CONNECT
privilegium ochTEMP
privilegium för att skapa tabeller för databaser;EXECUTE
privilegium för funktioner; ochUSAGE
behörighet för språk.
Du kanske är intresserad av detta DDL-kommando (kräver Postgres 9.0 eller senare):
GRANT SELECT ON ALL TABLES IN SCHEMA public TO myuser;
Medan du är ansluten till databasen i fråga, naturligtvis (se @marcels kommentar nedan), och som en användare med tillräckliga privilegier. Du kanske också är intresserad av inställningen DEFAULT PRIVILEGES
:
- Ge alla på ett specifikt schema i db till en grupproll i PostgreSQL
Mer detaljerat svar på hur man hanterar privilegier:
- Hur hanterar man DEFAULT PRIVILEGES för ANVÄNDARE på en DATABAS kontra SCHEMA?
pgAdmin har en funktion för mer sofistikerade bulkoperationer:
Eller så kan du fråga systemkatalogerna för att skapa DDL-satser för masstillstånd/återkallande ...