Перейти к содержимому

Подключиться к базе напрямую

Ваши данные лежат в отдельной базе PostgreSQL. Чтобы работать с ней своими инструментами — DBeaver, BI-системой, скриптом, — попросите у нас прямой доступ. Вы получите (разными каналами):

  • файл ключа <имя>_db_tunnel.ppk для SSH-туннеля;
  • реквизиты базы: адрес вида имя.db.goodwink.ru, базу, пользователя и пароль; порт — 5432;
  • роль на выбор: «только чтение» (<имя>_readonly — отчёты и BI, изменить через неё ничего нельзя) или «клиент» (<имя>_client — как SQL-редактор кабинета: правка строк таблиц источников и свои объекты).

Что видно в базе и что каждая роль может — Схемы и роли базы.

База в интернет не открыта. Ваша программа соединяется по SSH-туннелю: туннель прокидывает подключение до вашей базы и больше никуда — ключ разрешает только этот проброс.

ваш компьютер сервер GoodWink
┌──────────────┐ SSH-туннель (шифр.) ┌──────────────────────────┐
│ DBeaver/psql │──── ключ .ppk ─────────▶│ имя.db.goodwink.ru │
│ → localhost │ порт 22 │ :5432 — только ваша база │
└──────────────┘ └──────────────────────────┘
Параметр Значение
SSH-хост и порт 193.32.188.13, 22
SSH-пользователь из реквизитов, вида <имя>_tun
SSH-ключ файл <имя>_db_tunnel.ppk, без парольной фразы
Хост и порт базы (через туннель) имя.db.goodwink.ru, 5432
База данных из реквизитов, вида <имя>
Пользователь и пароль базы из реквизитов: <имя>_readonly или <имя>_client

DBeaver поднимает туннель сам.

  1. Новое соединение → PostgreSQL.
  2. Вкладка SSH → «Use SSH Tunnel»: хост 193.32.188.13, порт 22, пользователь <имя>_tun, Authentication Method — Public key, Private key — файл <имя>_db_tunnel.ppk, Passphrase пусто.
  3. Вкладка Main: хост имя.db.goodwink.ru, порт 5432, база, пользователь и пароль из реквизитов.
  4. «Тест соединения» → «Готово».

Так же подключаются DataGrip, pgAdmin и TablePlus — у всех есть вкладка SSH-туннеля с теми же параметрами.

Нужен ключ в формате OpenSSH — попросите его у нас или сконвертируйте: puttygen <имя>_db_tunnel.ppk -O private-openssh -o <имя>_db_tunnel (в PuTTYgen — Conversions → Export OpenSSH key).

В одном окне откройте туннель и оставьте его открытым:

Окно терминала
ssh -i <имя>_db_tunnel -N -L 15432:имя.db.goodwink.ru:5432 <имя>_tun@193.32.188.13

В другом — подключитесь через локальный порт 15432:

Окно терминала
psql "postgresql://<имя>_readonly:ПАРОЛЬ@localhost:15432/<имя>"

Проверка: \dn — схемы, \dt raw.* и \dt sources.* — таблицы в них.

  1. PuTTY → Session: хост 193.32.188.13, порт 22.
  2. Connection → SSH → Auth → Credentials: файл <имя>_db_tunnel.ppk.
  3. Connection → SSH → Tunnels: Source port 15432, Destination имя.db.goodwink.ru:5432, Add. Open, войдите как <имя>_tun.
  4. Пока окно PuTTY открыто, подключайте любой клиент к localhost:15432 с базой, пользователем и паролем из реквизитов.

Пакеты: pip install sshtunnel psycopg2-binary, ключ — в формате OpenSSH.

from sshtunnel import SSHTunnelForwarder
import psycopg2
with SSHTunnelForwarder(
("193.32.188.13", 22),
ssh_username="<имя>_tun",
ssh_pkey="<имя>_db_tunnel",
remote_bind_address=("имя.db.goodwink.ru", 5432)) as t:
conn = psycopg2.connect(
host="localhost", port=t.local_bind_port,
dbname="<имя>", user="<имя>_readonly", password="ПАРОЛЬ")
cur = conn.cursor()
cur.execute("SELECT table_schema, table_name FROM information_schema.tables"
" WHERE table_schema IN ('raw', 'sources') ORDER BY 1, 2")
for row in cur.fetchall():
print(row)

На любом другом языке — так же: сначала SSH-туннель, затем обычный драйвер PostgreSQL на локальный порт.

Без настройки — кнопка «Выгрузить CSV» на экране любой таблицы (Выгрузить CSV). Для живого подключения поднимите туннель через PuTTY, поставьте ODBC-драйвер PostgreSQL и в Excel → «Данные → Из других источников → ODBC» укажите сервер localhost, порт 15432, базу и пользователя <имя>_readonly.

  • Ошибка при INSERT, UPDATE или DELETE у роли «только чтение» — так задумано. У роли «клиент» сырые данные только читаются, а в таблицу источника нельзя добавить строку и нельзя менять служебные столбцы.
  • statement timeout или temp_file_limit — запрос упёрся в пределы (Пределы и сроки): сузьте выборку или посчитайте итог заранее материализованным представлением.
  • «database … does not exist» или нет прав на другую базу — вам видна только ваша база.
  • Ошибки по-английски — так база отвечает по умолчанию. По-русски — для сеанса: set lc_messages = 'ru_RU.UTF-8'; (в DBeaver — запросом при подключении). Язык ошибок в самом кабинете — в «Настройках»: Язык сообщений базы.
  • Не подключается вообще — проверьте, что туннель действительно запущен и что в клиенте базы хост — localhost (при PuTTY и psql) или имя.db.goodwink.ru (во вкладке Main у DBeaver).

Ключ — как пароль: храните его в надёжном месте и не передавайте третьим лицам. Ключ утёк или доступ больше не нужен — напишите нам, отзовём сразу.