Нужно ли всем пользователям доступ к базе данных Postgres в pg_hba.conf?

dba.stackexchange https://dba.stackexchange.com/questions/19088

  •  22-10-2019
  •  | 
  •  

Вопрос

Я только что проверял процесс создания пользователей в Pgadmin. У меня есть база данных db1 для которого я хочу создать пользователя, чтобы иметь возможность подключиться к нему. Я хочу, чтобы это была единственная база данных, к которой может подключиться пользователь.

После создания пользователя я открыл свой pg_hba.conf Файл и добавил пару строк:

host    db1 dbuser  127.0.0.1/32    md5
host    db1 dbuser  ::1/128         md5

У пользователя Postgres есть доступ ко всем базам данных:

host    all postgres    127.0.0.1/32    md5
host    all postgres    ::1/128         md5

Когда я подключаюсь к серверу через PGADMIN, я получаю ошибку, указывающая, что dbuser нет доступа к postgres база данных.

Это нормально? Если Dbuser даже потребует доступ к базе данных Postgres, когда я хочу, чтобы он только получил доступ db1? Как только я добавляю Postgres в список баз данных для dbuser, Я могу подключиться.

Это было полезно?

Решение

Что вы видите Пгадмин подключение к настроенным Техническое обслуживание DB - который postgres по умолчанию. Выберите сервер на панели браузера объектов и выберите «Свойства» из контекстного меню (щелкнуть правой кнопкой мыши). Раскрывающееся меню предлагает только типичный выбор, но вы можете Просто введите любое имя базы данных.

Если доступ пользователя ограничен один база данных в pg_hba.conf (который является Наиболее эффективное место для этого), вы можете заставить его работать с Pgadmin, настройка Вот этот База данных как обслуживание DB. Ничего плохого не выйдет из этого.

Другой вариант - предоставить доступ к техническому обслуживанию DB (postgres или что -то еще) в pg_hba.conf кроме того.

Вы также можете открыть все ворота в pg_hba.conf и регулировать доступ с разрешениями базы данных, как объяснил @a_horse в своем ответе. Это легче управлять, но ограничивая доступ в pg_hba.conf безопаснее и быстрее - более устойчива к атакам DOS и тяжелой нагрузке. Однако в большинстве случаев не будет иметь большого значения.

Цитируя Документация PGADMIN 1.22 (Окончательный выпуск PGADMIN III):

Поле DB обслуживания используется для указания начальной базы данных, к которой подключается PGADMIN, и это будет иметь PgagentСхема и AdminPack Объекты установлены (оба необязательно). На PostgreSQL 8.1 и выше используется DB технического обслуживания, обычно называется «Postgres», а на более ранних версиях «Template1», хотя для этой цели предпочтительнее создавать базу данных «Postgres», чтобы избежать загромождения базы данных шаблонов.

Другие советы

Вам не нужно делать это через pg_hba.conf.

Просто отмените привилегию Connect в базе данных от этого пользователя.

Однако по умолчанию общественность предоставляется привилегией Connect. Так что вам нужно сначала отменить это:

revoke connect on db1 from public;
grant connect on db1 to dbuser;

Вам нужно запустить revoke ... from public оператор для всех баз данных, чтобы убедиться, что только конкретные пользователи могут подключиться.

Как только вы это сделаете, вы можете оставить PG_HBA.Conf «Open» для всех пользователей и всех баз данных.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с dba.stackexchange
scroll top