Årsagen er, at du har brug for yderligere privilegier for at få adgang til en visning eller tabel. Privilegier på databasen dækker ikke adgang til alle objekter i den.
Det er anderledes med funktionerne:EXECUTE
privilegium er givet til public
som standard. Men funktionen udføres med den aktuelle brugers privilegier. Du kan være interesseret i SECURITY DEFINER
modifikator for CREATE FUNCTION
. Men normalt er det nok at give SELECT
på involverede borde.
Per dokumentation om standardrettigheder:
Afhængigt af typen af objekt kan de oprindelige standardprivilegier omfatte tildeling af nogle privilegier til PUBLIC
. Standarden er ingen offentlig adgang til tabeller, kolonner, skemaer og tablespaces; CONNECT
privilegium og TEMP
rettigheder til oprettelse af tabel for databaser; EXECUTE
privilegium til funktioner; og USAGE
privilegium til sprog.
Du kan være interesseret i denne DDL-kommando (kræver Postgres 9.0 eller senere):
GRANT SELECT ON ALL TABLES IN SCHEMA public TO myuser;
Mens du er forbundet til den pågældende database, selvfølgelig (se @marcels kommentar nedenfor), og som bruger med tilstrækkelige privilegier. Du kan også være interesseret i indstillingen DEFAULT PRIVILEGES
:
- Tildel alle på et specifikt skema i db'en til en grupperolle i PostgreSQL
Mere detaljeret svar på, hvordan man administrerer privilegier:
- Hvordan administrerer man STANDARDPRIVILEGIER for BRUGERE på en DATABASE vs. SCHEMA?
pgAdmin har en funktion til mere sofistikerede masseoperationer:
Eller du kan forespørge systemkatalogerne for at oprette DDL-erklæringer til massetildeling/tilbagekaldelse ...