Отключить все операции (включая перечисление с помощью psql -l) для не принадлежащих баз данных для роли? - PullRequest
1 голос
/ 13 февраля 2011

Мы используем PostgreSQL 8.3 в качестве сервера БД для нашей ERP-системы.До сих пор не было необходимости создавать разные базы данных под разными пользователями (роли в терминах 8.3) в postgres.И теперь он появился.

Вопрос 1: Правильно ли, что пользователь с привилегией суперпользователя no может читать / писать только в свои собственные базы данных (при условии, что пользовательимеет привилегию CREATEDB)?

Вопрос 2. Как отключить для пользователя вывод списка всех баз данных с помощью команды psql -l?Даже если ответ на первый вопрос положительный, этот список все еще доступен для произвольного пользователя.

Спасибо.

Ответы [ 4 ]

3 голосов
/ 14 февраля 2011

Невозможно отключить psql -l, не нарушив ситуацию.Вы можете использовать параметр конфигурации sameuser в pg_hba.conf, чтобы позволить пользователям подключаться только к своим базам данных.

2 голосов
/ 01 мая 2013

http://wiki.postgresql.org/wiki/Shared_Database_Hosting

Postgres 8,4

Основной корпус

Мы изменяем template1, чтобы отозвать все права из «PUBLIC» на общедоступную схему, чтобы предотвратить доступ других пользователей к публичной схеме индивидуальных клиентских баз данных.

psql -U postgres template1 -f - << EOT

REVOKE ALL ON DATABASE template1 FROM public;
REVOKE ALL ON SCHEMA public FROM public;
GRANT ALL ON SCHEMA public TO postgres;
CREATE LANGUAGE plpgsql;
EOT
2 голосов
/ 13 февраля 2011

Q1: Нет. Все это контролируется привилегиями на разных уровнях. Для записи в таблицу вам нужны привилегии для этой таблицы и т. Д. Единственные привилегии на уровне базы данных (которые владелец будет иметь по умолчанию) - это возможность создавать схемы и временные таблицы. Это, вероятно, не то, что вы имели в виду. Возможно, вы могли бы настроить его таким образом, но он далек от настройки по умолчанию или обычной установки.

Q2: Вы можете отозвать привилегию SELECT на pg_database. Но делать это не очень поддерживали. Я предлагаю вам пересмотреть, действительно ли вам это нужно.

2 голосов
/ 13 февраля 2011

ре 1) да, это правильно

re 2) Я думаю, что это можно сделать с помощью revoke select on pg_database from public, но я не уверен, какие побочные эффекты будут.

Редактировать
Это обсуждение может быть интересным для вас:
http://www.mail-archive.com/pgsql-general@postgresql.org/msg64005.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...