Подтвердить что ты не робот

Как подключиться к удаленной базе данных PostgreSQL через SSL с Python

Я хочу подключиться к удаленной базе данных PostgreSQL через Python, чтобы выполнить базовый анализ данных. Для этой базы данных требуется SSL (проверка-ca), а также три файла (которые у меня есть):

  • Файл корневого файла сервера
  • Файл сертификата клиента
  • Файл ключа клиента

Мне не удалось найти учебник, в котором описывается, как сделать это соединение с Python. Любая помощь приветствуется.

4b9b3361

Ответ 1

Используйте модуль psycopg2.

Вам нужно будет использовать параметры ssl в строке подключения или добавить их в качестве аргументов ключевого слова:

import psycopg2

conn = psycopg2.connect(dbname='yourdb', user='dbuser', password='abcd1234', host='server', port='5432', sslmode='require')

В этом случае sslmode указывает, что требуется SSL.

Чтобы выполнить проверку сертификата сервера, вы можете установить sslmode для sslmode verify-full или sslmode verify-ca. Вам необходимо указать путь к сертификату сервера в sslrootcert. Также установите значения sslcert и sslkey для вашего сертификата клиента и ключа соответственно.

Это подробно объясняется в документации по PostgreSQL Connection Strings (см. Также ключевые слова параметров) и в поддержке SSL.

Ответ 2

Вы также можете использовать туннель ssh с paramiko и sshtunnel:

import psycopg2
import paramiko
from sshtunnel import SSHTunnelForwarder

mypkey = paramiko.RSAKey.from_private_key_file('/path/to/private/key')

tunnel =  SSHTunnelForwarder(
        (host_ip, 22),
        ssh_username=username,
        ssh_pkey=mypkey,
        remote_bind_address=('localhost', psql_port))

tunnel.start()
conn = psycopg2.connect(dbname='gisdata', user=psql_username, password=psql_password, host='127.0.0.1', port=tunnel.local_bind_port)