GRANT
s na różnych obiektach są oddzielne. GRANT
w bazie danych nie GRANT
prawa do schematu w obrębie. Podobnie, GRANT
ing na schemacie nie daje praw do tabel wewnątrz.
Jeśli masz prawa do SELECT
z tabeli, ale bez prawa do zobaczenia go w schemacie, który go zawiera, wtedy nie będziesz mieć 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ślny GRANT
wszystkich praw do roli public
, którego członkiem jest każdy użytkownik/grupa. Więc każdy już korzysta z tego schematu.
Wyrażenie:
(zakładając, że spełnione są również własne wymagania dotyczące uprawnień obiektów)
Mówi, że musisz mieć USAGE
na schemacie, aby używać w nim obiektów, ale mając USAGE
na schemacie sam w sobie nie wystarcza do korzystania z obiektów w schemacie, musisz mieć również uprawnienia do samych obiektów.
To jest jak drzewo katalogów. Jeśli utworzysz katalog somedir
z plikiem somefile
wewnątrz niego, a następnie ustaw go tak, aby tylko twój własny użytkownik miał dostęp do katalogu lub pliku (tryb rwx------
w katalogu, tryb rw-------
pliku), nikt inny nie będzie mógł wyświetlić katalogu, aby zobaczyć, czy plik istnieje.
Jeśli miałbyś przyznać prawa do odczytu światowego na pliku (tryb rw-r--r--
), ale nie zmieniaj uprawnień do katalogów, nie miałoby to żadnego znaczenia. Nikt nie mógł zobaczyć plik, aby go odczytać, ponieważ nie mają uprawnień do wyświetlenia katalogu.
Jeśli zamiast tego ustawisz rwx-r-xr-x
w katalogu, ustawiając go tak, aby ludzie mogli wyświetlać i przeglądać katalog, ale bez zmieniania uprawnień do plików, ludzie mogliby listować plik, ale nie mógł odczytać ponieważ nie mieliby dostępu do pliku.
Musisz ustawić oba uprawnienia umożliwiające ludziom wyświetlanie pliku.
To samo w Pg. Potrzebujesz obu schematów USAGE
prawa i prawa obiektu do wykonania akcji na obiekcie, np. SELECT
ze stołu.
(Analogia nieco spada w tym, że PostgreSQL nie ma jeszcze zabezpieczeń na poziomie wiersza, więc użytkownik nadal może "zobaczyć", że tabela istnieje w schemacie przez SELECT
ing z pg_class
bezpośrednio. Nie mogą jednak w żaden sposób z nią wchodzić w interakcje, więc to tylko część „lista”, która nie jest taka sama.)