web-dev-qa-db-ja.com

Pythonを使用してSSL経由でリモートPostgreSQLデータベースに接続する方法

Pythonを介して基本的なデータ分析を行うためにリモートPostgreSQLデータベースに接続したい。

  • サーバールート証明書ファイル
  • クライアント証明書ファイル
  • クライアントキーファイル

Pythonとこの接続を確立する方法を説明するチュートリアルを見つけることができませんでした。どんな助けも大歓迎です。

25
Alex

psycopg2 モジュールを使用します。

接続文字列でsslオプションを使用するか、キーのWord引数として追加する必要があります。

import psycopg2

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

この場合、sslmodeはSSLが必要であることを指定します。

サーバー証明書の検証を実行するには、sslmodeverify-fullまたはverify-caに設定できます。 sslrootcertでサーバー証明書へのパスを指定する必要があります。また、sslcertsslkeyの値をそれぞれクライアント証明書とキーに設定します。

詳細については、PostgreSQL 接続文字列のドキュメント (パラメーターキーワードも参照)および SSLサポート で説明されています。

43
mhawke

Paramikoおよびsshtunnelでsshトンネルを使用することもできます。

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)
3
Dan.faudemer