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á.)