← Назад к вопросам

Что такое файл pg_hba.conf в PostgreSQL?

1.2 Junior🔥 161 комментариев
#Linux и администрирование#Базы данных

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Файл pg_hba.conf в PostgreSQL: Полное руководство

pg_hba.conf (Host-Based Authentication) — это критически важный конфигурационный файл в PostgreSQL, который определяет правила аутентификации для всех входящих подключений к серверу баз данных. Этот файл выступает в роли "привратника" безопасности, решая, кто может подключиться, откуда, к каким базам данных, под какими пользователями и с использованием каких методов аутентификации.

Основное назначение и расположение

Файл находится в каталоге данных PostgreSQL (обычно $PGDATA). Его расположение можно проверить запросом:

SHOW hba_file;

Каждая строка в файле представляет собой правило, которое проверяется сверху вниз — первое совпавшее правило определяет метод аутентификации. Если ни одно правило не совпало, доступ запрещается.

Структура правил pg_hba.conf

Каждое правило состоит из 5-7 полей (в зависимости от типа):

# TYPE  DATABASE  USER  ADDRESS  METHOD  [OPTIONS]

Разберем каждое поле подробно:

  1. TYPE — тип подключения:

    • local — локальные подключения через Unix-сокеты
    • host — TCP/IP подключения (включая SSL)
    • hostssl — только SSL-подключения
    • hostnossl — только не-SSL подключения
  2. DATABASE — имя базы данных:

    • Конкретное имя (mydb)
    • all — все базы данных
    • sameuser — база с именем, совпадающим с именем пользователя
    • samerole — пользователи с ролью, совпадающей с именем базы
    • replication — для потоковой репликации
  3. USER — имя пользователя/роли:

    • Конкретное имя (app_user)
    • all — все пользователи
    • Группа ролей с + перед именем (+developers)
  4. ADDRESS — сетевой адрес клиента:

    • all — все адреса (0.0.0.0/0 для IPv4, ::/0 для IPv6)
    • Конкретный IP (192.168.1.100)
    • Подсеть в CIDR-нотации (192.168.1.0/24)
    • Для local типа — оставляется пустым
  5. METHOD — метод аутентификации (самое важное поле):

    • trust — полное доверие (опасно!)
    • reject — немедленный отказ
    • md5 — парольная аутентификация MD5
    • scram-sha-256 — современный безопасный метод (рекомендуется)
    • password — пароль в открытом виде (небезопасно)
    • ident / peer — аутентификация через ОС
    • gss / sspi / ldap / radius / pam — внешние методы
    • cert — SSL-сертификаты

Практические примеры

Базовый безопасный конфиг для production-среды:

# Локальные подключения суперпользователя через peer-аутентификацию
local   all             postgres                                peer

# Локальные подключения приложений
local   all             all                                     scram-sha-256

# SSL-подключения из внутренней сети
hostssl app_db          app_user        10.0.0.0/8              scram-sha-256

# Репликация только с определенного хоста
host    replication     replica_user    192.168.1.100/32        md5

# Веб-приложение с ограничением по IP
host    web_db          web_user        203.0.113.50/32         scram-sha-256

# Запрет всего остального
host    all             all             all                     reject

Критические аспекты работы

Приоритет правил: PostgreSQL проверяет правила последовательно. Первое совпавшее правило применяется, остальные игнорируются. Поэтому более специфичные правила должны быть выше общих.

Применение изменений: После изменения файла необходимо перезагрузить конфигурацию:

# Перезагрузка без остановки сервиса
pg_ctl reload
# Или через SQL
SELECT pg_reload_conf();

Безопасность: Неправильная настройка pg_hba.conf — частая причина уязвимостей:

  • Никогда не используйте trust для сетевых подключений
  • Для production используйте scram-sha-256 или cert
  • Минимизируйте использование md5 (устаревший метод)
  • Всегда ограничивайте доступ по IP-адресам

Диагностика проблем: При проблемах с подключением проверяйте:

  1. Соответствует ли подключение правилам в pg_hba.conf
  2. Логи PostgreSQL (log_connections = on)
  3. Состояние загрузки конфига

Особые сценарии использования

Для репликации требуется отдельное правило:

host    replication     replica_user    192.168.1.0/24          scram-sha-256

Для Docker-контейнеров часто используют:

host    all             all             172.17.0.0/16           scram-sha-256

Резюме: pg_hba.conf — фундаментальный компонент безопасности PostgreSQL, требующий тщательного проектирования. Правильная его настройка обеспечивает баланс между безопасностью и доступностью, контролируя каждый аспект подключения к вашей СУБД. Всегда тестируйте изменения в staging-среде и имейте откатную стратегию на случай блокировки доступа.

Что такое файл pg_hba.conf в PostgreSQL? | PrepBro