GRANT
s на разных объектах разделены. 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.GRANT
утверждения, не относящиеся к таблицам, - это не то, что я хочу, поскольку они влияют на все базы данных ...: sGRANT
в схеме влияет на эту схему.GRANT ... ON ALL TABLES IN SCHEMA ...
влияет на все таблицы в схеме в конкретной базе данных. Нет никакихGRANT
s, которые влияют на все базы данных (хорошо, кромеGRANT
членства в роли для пользователя).psql
без,-d db
вы работаете "вне" любой базы данных, но вы всегда подключены к базе данных, и по умолчанию вы подключены к базе данных с тем же именем, что и ваша роль. db = role = user = group ... это немного сбивает с толку: DWITH LOGIN
; По сути, все может быть группой, и группы могут быть настроены на возможность входа в систему.Для производственной системы вы можете использовать эту конфигурацию:
источник
admin
также предоставлятьCREATE
в схеме?GRANT USAGE ON SCHEMA
, пользователь с правами администратора не может создать таблицу, но он может сделать это с помощьюALL GRANT ALL ON SCHEMA
....grant all on schema public to admin
? PS: Я также добавилgrant usage, select on all sequences in schema public to read_only/read_write;
grant execute on all functions in schema public to read_only/read_write;
Что ж, это мое последнее решение для простого db для Linux:
источник