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.
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 .
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)