GRANT s na různých objektech jsou oddělené. GRANT ing na databázi GRANT práva na schéma uvnitř. Podobně GRANT ing na schématu neuděluje práva na tabulky uvnitř.
Pokud máte práva SELECT z tabulky, ale nemáte právo ji vidět ve schématu, které ji obsahuje, pak k tabulce nemáte přístup.
Testy práv se provádějí v pořadí:
Do you have `USAGE` on the schema?
No: Reject access.
Yes: Do you also have the appropriate rights on the table?
No: Reject access.
Yes: Check column privileges.
Váš zmatek může vyplynout ze skutečnosti, že public schéma má výchozí GRANT všech práv k roli public , jehož členem je každý uživatel/skupina. Takže každý už má toto schéma využití.
Fráze:
(za předpokladu, že jsou splněny i požadavky na vlastní oprávnění objektů)
Říká, že musíte mít USAGE na schématu k použití objektů v něm, ale má USAGE na schématu samo o sobě nestačí k použití objektů ve schématu, musíte mít také práva na samotné objekty.
Je to jako strom adresářů. Pokud vytvoříte adresář somedir se souborem somefile v něm pak nastavte tak, aby k adresáři nebo souboru měl přístup pouze váš vlastní uživatel (režim rwx------ v adresáři, režim rw------- na souboru), pak nikdo jiný nemůže vypsat adresář, aby viděl, že soubor existuje.
Pokud byste měli udělit práva na čtení celého souboru (režim rw-r--r-- ), ale nezměníte oprávnění k adresáři, nebude to žádný rozdíl. Nikdo nemohl vidět soubor, aby si ho přečetli, protože nemají práva k výpisu adresáře.
Pokud místo toho nastavíte rwx-r-xr-x v adresáři nastavením tak, aby lidé mohli vypisovat a procházet adresář, ale beze změny oprávnění k souboru, lidé mohli vypisovat soubor, ale nemohl číst protože by k souboru neměli přístup.
Musíte nastavit obě oprávnění pro lidi, aby skutečně mohli soubor prohlížet.
Totéž v Pg. Potřebujete obě schémata USAGE práva a práva objektu k provedení akce s objektem, jako je SELECT ze stolu.
(Analogie trochu klesá v tom, že PostgreSQL zatím nemá zabezpečení na úrovni řádků, takže uživatel může stále "vidět", že tabulka ve schématu existuje pomocí SELECT z pg_class přímo. Nemohou s ním však žádným způsobem interagovat, takže je to jen část „seznamu“, která není úplně stejná.)