GRANTs na różnych obiektach są oddzielne. GRANTw bazie danych nie ma GRANTuprawnień do schematu w niej zawartego. Podobnie, GRANTumieszczanie w schemacie nie daje praw do tabel w nim zawartych.
Jeśli masz uprawnienia do SELECTz 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 publicschemat ma domyślnie GRANTwszystkie 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ć USAGEna schemacie, aby używać obiektów w nim zawartych, ale posiadanie USAGEna 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 somedirzawierają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-xkatalog, 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 USAGEpraw do schematu, jak i praw do obiektu, aby wykonać akcję na obiekcie, na przykład SELECTz 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 SELECTz 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 -ew pqsl jest coś w rodzaju instrukcji for.