Skip to content
Permalink
Branch: master
Find file Copy path
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
81 lines (66 sloc) 3.31 KB

Доступ к PostgreSQL извне через PGBouncer

PostgreSQL

  1. Подключаемся к PostgreSQL:
    su postgres
    psql
  2. Создаем пользователя для бэкапов:
    CREATE USER backup SUPERUSER PASSWORD 'PLACE YOUR PASSWORD HERE';
  3. Делаем его readonly:
    ALTER USER backup set default_transaction_read_only = on;
  4. Запоминаем MD5 хэш пароля нового пользователя (шучу, выписываем):
    use postgres
    SELECT usename, passwd FROM pg_shadow
  5. Выходим из psql и идём добавлять доступ к юзеру со внешнего сервера через HBA:
    nano /etc/postgresql/9.6/main/pg_hba.conf
  6. Добавляем след. строку:
    host    all             backup          1.1.1.1/32        md5
    
    Вместо 1.1.1.1 указываем IP внешнего сервера.

На этом всё. Если у вас нет pgbouncer, то в настройках PostgreSQL открываем доступ из внешней сети и обновляем настройки.

PGBouncer

  1. Корректируем настройки pgbouncer:
    nano /etc/pgbouncer/pgbouncer.ini
    1. Открываем доступ из внешней сети: listen_addr = *
    2. Включаем использование файла HBA: auth_type = hba
    3. Указываем путь к файлу HBA: auth_hba_file = /etc/postgresql/9.6/main/pg_hba.conf
  2. Добавляем в список паролей, используемых в pgbouncer, данные нового пользователя:
    nano /etc/pgbouncer/userlist.txt
    Добавляем:
    "backup" "MD5 хэш пароля"
  3. Перезапускаем pgbouncer:
    service pgbouncer restart

Проверка доступов

С внешнего сервера:

pgcli --host АДРЕС_СЕРВЕРА_БД --port 6432 --dbname ЛЮБАЯ_БД --username ЛОКАЛЬНЫЙ_ПОЛЬЗОВАТЕЛЬ

Вводим пароль, и должно быть отказано в коннекте. Значит, лишнего не расшарили.

С сервера БД:

pgcli --host localhost --port 6432 --dbname ЛЮБАЯ_БД --username ЛОКАЛЬНЫЙ_ПОЛЬЗОВАТЕЛЬ

Вводим пароль, и должен быть успешный коннект. Значит, текущие доступы не сломали.

С сервера бэкапов:

pgcli --host localhost --port 6432 --dbname ЛЮБАЯ_БД --username backup

Вводим пароль, и должен быть успешный коннект. Значит, новый доступ добавили.

You can’t perform that action at this time.