GRANT
s na różnych obiektach są oddzielne. GRANT
w bazie danych nie ma GRANT
uprawnień do schematu w niej zawartego. Podobnie, GRANT
umieszczanie w schemacie nie daje praw do tabel w nim zawartych.
Jeśli masz uprawnienia do SELECT
z tabeli, ale nie masz prawa do wyświetlania jej w schemacie, który ją zawiera, nie możesz uzyskać dostępu do tabeli.
Testy uprawnień są wykonywane w kolejności:
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.
Twoje zamieszanie może wynikać z faktu, że public
schemat ma domyślnie GRANT
wszystkie uprawnienia do roli public
, której członkiem jest każdy użytkownik / grupa. Więc każdy ma już zastosowanie w tym schemacie.
Fraza:
(zakładając, że spełnione są również własne wymagania dotyczące uprawnień obiektu)
Mówi, że musisz mieć USAGE
na schemacie, aby używać obiektów w nim zawartych, ale posiadanie USAGE
na schemacie nie jest samo w sobie wystarczające do używania obiektów w schemacie, musisz również mieć uprawnienia do samych obiektów.
To jest jak drzewo katalogów. Jeśli utworzysz katalog somedir
zawierający plik somefile
, a następnie ustawisz go tak, aby tylko twój własny użytkownik mógł uzyskać dostęp do katalogu lub pliku (tryb rwx------
w katalogu, tryb rw-------
na pliku), nikt inny nie może wyświetlić katalogu, aby zobaczyć, czy plik istnieje.
Gdybyś miał nadać prawa do odczytu pliku na całym świecie (tryb rw-r--r--
), ale nie zmieniałby uprawnień do katalogu, nie miałoby to żadnego znaczenia. Nikt nie mógł zobaczyć pliku, aby go przeczytać, ponieważ nie ma uprawnień do wyświetlenia katalogu.
Jeśli zamiast tego ustawisz rwx-r-xr-x
katalog, ustawiając go tak, aby ludzie mogli wyświetlać i przechodzić przez katalog, ale nie zmieniając uprawnień do pliku, ludzie mogliby wyświetlić plik, ale nie mogliby go odczytać , ponieważ nie mieliby dostępu do pliku.
Musisz ustawić oba uprawnienia, aby ludzie mogli faktycznie wyświetlać plik.
To samo na str. Potrzebujesz zarówno USAGE
praw do schematu, jak i praw do obiektu, aby wykonać akcję na obiekcie, na przykład SELECT
z tabeli.
(Analogia nieco spada, ponieważ PostgreSQL nie ma jeszcze zabezpieczeń na poziomie wiersza, więc użytkownik może nadal "zobaczyć", że tabela istnieje w schemacie, bezpośrednio SELECT
z niej pg_class
. Nie mogą z nią w żaden sposób współdziałać , więc to tylko część „listy” nie jest taka sama).
CREATE EXTENSION
. To mniej więcej ten sam problem z plikami utworzonymi w systemie Linux, gdy tysu
. Będzie dobrze, jeślisudo -e
w pqsl jest coś w rodzaju instrukcji for.