Предоставить доступ только к одной схеме в postgreSQL - PullRequest
1 голос
/ 25 сентября 2019

У меня есть пользователь just_one_schema_user.

В моей базе данных у меня есть две схемы: public и sample

Как я могу заставить этого пользователя видеть только sample?

Вот что я сделал:

GRANT USAGE ON SCHEMA sample TO just_one_schema_user

REVOKE ALL PRIVILEGES ON SCHEMA public FROM just_one_schema_user

Но пользователь по-прежнему может перечислять таблицы в publicи увидеть их структуры.

1 Ответ

1 голос
/ 25 сентября 2019

О доступе к метаданным таблицы:

Как прокомментировал Айслингр, нет хорошего способа скрыть эту информацию от пользователей.

Вам бы пришлось запретить пользователю доступ к * 1005.*, pg_namespace и pg_proc и аналогичные таблицы.Это может быть выполнено, если вы установите allow_system_table_mods в on, и PostgreSQL продолжит функционировать, но многие вещи больше не будут работать:

  • Использованиеpsql служебные команды, такие как \d или \dt

  • Подобные инструменты для других инструментов

  • Системы мониторинга

По сути, вы не сможете больше видеть метаданных .

Нет способа разрешить пользователю просматривать только некоторые метаданные,это все или ничего.

Но это не проблема.Нет веских причин хранить метаданные от кого-либо - это общедоступная информация.

PostgreSQL не считает это проблемой безопасности.Просто потому, что я знаю, что есть таблица customer со столбцом credit_card_number, я не могу приблизиться к ней, если права доступа установлены правильно.

О доступе к объектам в public:

REVOKE, который удаляет привилегию, которая никогда не была предоставлена, ничего не делает.

Привилегия USAGE для схемы public предоставляется PUBLIC, а не just_one_schema_user.

Используйте это, чтобы показать разрешения в psql:

\dn+

Вы ищете:

REVOKE CREATE, USAGE ON SCHEMA public FROM public;

Я бырекомендуем хранить данные приложения без public, только расширения.Тогда не отзывайте USAGE, только CREATE.

...