Důvodem je, že pro přístup k pohledu nebo tabulce potřebujete další oprávnění. Oprávnění v databázi nepokrývají přístup ke všem objektům v ní.
U funkcí je to jiné:EXECUTE
oprávnění je uděleno public
ve výchozím stavu. Ale funkce se provádí s oprávněními aktuálního uživatele. Možná vás bude zajímat SECURITY DEFINER
modifikátor pro CREATE FUNCTION
. Normálně ale stačí udělit SELECT
na příslušných stolech.
Podle dokumentace o výchozích oprávněních:
V závislosti na typu objektu mohou výchozí výchozí oprávnění zahrnovat udělení některých oprávnění
PUBLIC
. Výchozí hodnota je zákaz veřejného přístupu pro tabulky, sloupce, schémata a tabulkové prostory;CONNECT
oprávnění aTEMP
oprávnění k vytváření tabulek pro databáze;EXECUTE
oprávnění k funkcím; aUSAGE
privilegium pro jazyky.
Možná vás bude zajímat tento příkaz DDL (vyžaduje Postgres 9.0 nebo později):
GRANT SELECT ON ALL TABLES IN SCHEMA public TO myuser;
Samozřejmě při připojení k dané databázi (viz komentář @marcel níže) a jako uživatel s dostatečnými oprávněními. Také by vás mohlo zajímat nastavení DEFAULT PRIVILEGES
:
- Udělte vše na konkrétním schématu v databázi skupinové roli v PostgreSQL
Podrobnější odpověď, jak spravovat oprávnění:
- Jak spravovat VÝCHOZÍ PRIVILEGIE pro UŽIVATELE v DATABÁZI vs. SCHÉMA?
pgAdmin má funkci pro sofistikovanější hromadné operace:
Nebo můžete zadat dotaz do systémových katalogů a vytvořit příkazy DDL pro hromadné udělení / zrušení ...