Как подключиться к удаленной базе данных PostgreSQL через SSL с Python
Я хочу подключиться к удаленной базе данных PostgreSQL через Python, чтобы выполнить базовый анализ данных. Для этой базы данных требуется SSL (проверка-ca), а также три файла (которые у меня есть):
- Файл корневого файла сервера
- Файл сертификата клиента
- Файл ключа клиента
Мне не удалось найти учебник, в котором описывается, как сделать это соединение с Python.
Любая помощь приветствуется.
Ответы
Ответ 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)