Powodem jest to, że potrzebujesz dodatkowych uprawnień, aby uzyskać dostęp do widoku lub tabeli. Uprawnienia w bazie danych nie obejmują dostępu do wszystkich znajdujących się w niej obiektów.
Inaczej jest z funkcjami:EXECUTE
uprawnienie jest przyznawane użytkownikowi public
domyślnie. Ale funkcja jest realizowana z uprawnieniami aktualnego użytkownika. Być może zainteresuje Cię SECURITY DEFINER
modyfikator dla CREATE FUNCTION
. Ale normalnie wystarczy przyznać SELECT
na zaangażowanych stołach.
Zgodnie z dokumentacją dotyczącą uprawnień domyślnych:
W zależności od typu obiektu, początkowe uprawnienia domyślne mogą obejmować nadanie niektórych uprawnień do PUBLIC
. Domyślnie nie ma publicznego dostępu do tabel, kolumn, schematów i obszarów tabel; CONNECT
przywilej i TEMP
uprawnienia do tworzenia tabel dla baz danych; EXECUTE
uprawnienia do funkcji; i USAGE
przywilej dla języków.
Możesz być zainteresowany tym poleceniem DDL (wymaga Postgres 9.0 lub później):
GRANT SELECT ON ALL TABLES IN SCHEMA public TO myuser;
Oczywiście z połączeniem z daną bazą danych (patrz komentarz @marcela poniżej) i jako użytkownik z wystarczającymi uprawnieniami. Możesz być również zainteresowany ustawieniem DEFAULT PRIVILEGES
:
- Przyznaj wszystko w określonym schemacie w bazie danych do roli grupowej w PostgreSQL
Bardziej szczegółowa odpowiedź na temat zarządzania uprawnieniami:
- Jak zarządzać DOMYŚLNYMI UPRAWNIENIAMI dla UŻYTKOWNIKÓW BAZ DANYCH a SCHEMATEM?
pgAdmin ma funkcję dla bardziej wyrafinowanych operacji zbiorczych:
Możesz też wysłać zapytanie do katalogów systemowych, aby utworzyć instrukcje DDL do masowego przyznawania / odwoływania ...