web-dev-qa-db-fra.com

Comment se connecter à une base de données PostgreSQL distante via SSL avec Python

Je souhaite me connecter à une base de données PostgreSQL distante via Python pour effectuer une analyse de base des données. Cette base de données nécessite SSL (verify-ca), ainsi que trois fichiers (que j'ai):

  • Fichier de certificat racine du serveur
  • Fichier de certificat client
  • Fichier de clé client

Je n'ai pas pu trouver de tutoriel décrivant comment établir cette connexion avec Python. Toute aide est appréciée.

25
Alex

Utilisez le psycopg2 module.

Vous devrez utiliser les options ssl dans votre chaîne de connexion ou les ajouter comme arguments Word clés:

import psycopg2

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

Dans ce cas, sslmode spécifie que SSL est requis.

Pour effectuer la vérification du certificat du serveur, vous pouvez définir sslmode sur verify-full ou verify-ca. Vous devez fournir le chemin d'accès au certificat de serveur dans sslrootcert. Définissez également les valeurs sslcert et sslkey sur votre certificat client et votre clé respectivement.

Il est expliqué en détail dans PostgreSQL Documentation des chaînes de connexion (voir aussi Mots clés des paramètres) et dans Support SSL .

43
mhawke

Vous pouvez également utiliser un tunnel ssh avec paramiko et 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)
3
Dan.faudemer