Нужно ли всем пользователям доступ к базе данных Postgres в pg_hba.conf?
-
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» для всех пользователей и всех баз данных.