GRANTs на разных объектах разделены. GRANTРабота с базой данных не имеет GRANTправ на схему внутри. Аналогично,GRANT использование схемы не дает прав на таблицы внутри.
Если у вас есть права SELECTдоступа к таблице, но нет права видеть ее в схеме, которая ее содержит, вы не можете получить доступ к таблице.
Проверка прав проводится в следующем порядке:
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.
Ваше замешательство может возникнуть из-за того, что publicсхема по умолчанию GRANTимеет все права на роль public, членом которой является каждый пользователь / группа. Таким образом, каждый уже использует эту схему.
Фраза:
(при условии, что собственные требования к привилегиям объектов также выполнены)
Говорит, что у вас должна быть USAGEсхема, чтобы использовать объекты внутри нее, но наличие USAGEсхемы само по себе недостаточно для использования объектов в схеме, вы также должны иметь права на сами объекты.
Это похоже на дерево каталогов. Если вы создаете каталог somedirс файлом somefileв нем, а затем установите его так, чтобы только ваш собственный пользователь мог получить доступ к каталогу или файлу (режим в каталоге rwx------, режим rw-------в файле), тогда никто другой не сможет перечислить каталог, чтобы убедиться, что файл существует.
Если бы вы предоставили права на чтение файла (режим rw-r--r--), но не изменили права доступа к каталогу, это не имело бы никакого значения. Никто не мог увидеть файл, чтобы прочитать его, потому что у них нет прав на просмотр каталога.
Если вы вместо этого установите rwx-r-xr-xкаталог, установив его так, чтобы люди могли перечислять и перемещаться по каталогу, но не изменяя права доступа к файлу, люди могли перечислить файл, но не могли прочитать его потому что у них не было бы доступа к файлу.
Вам необходимо установить оба разрешения, чтобы люди действительно могли просматривать файл.
То же самое на стр. Вам нужны как USAGEправа схемы, так и права объекта, чтобы выполнить действие над объектом, например SELECTнад таблицей.
(Аналогия падает вниз немного в том , что PostgreSQL не имеет защиты на уровне строк еще, так что пользователь может по- прежнему «видеть» , что таблица существует в схеме по SELECTИНГ от pg_classнепосредственно. Они не могут взаимодействовать с ним каким - либо образом хотя, значит, это не совсем то же самое "список".)
CREATE EXTENSION. Это более или менее та же проблема с файлами, созданными в Linux, пока выsu. Будет хорошо, еслиsudo -eв pqsl будет что-то вроде операторов for.