Qualche volta vi sarà capitato di dover accedere ad un database MySQL configurato per accettare esclusivamente connessioni da altre macchine sulla rete locale.
Quella descritta è una misura di sicurezza comune che viene adottata ad esempio sui web server.
Il problema si può aggirare attraverso un tunnel SSH per accedere alla macchina, aprire una connessione al database e mappare la porta del database a quella sulla tua macchina locale.
Vediamo ora come si può implementare questa soluzione in Python utilizzando i pacchetti sshtunnel e mysql.connector.
import os import sys import time from datetime import date from datetime import datetime from datetime import timedelta import mysql.connector import sshtunnel import time host = 'remote_ip' sshtunnel.SSH_TIMEOUT = 5.0 sshtunnel.TUNNEL_TIMEOUT = 5.0 def get_data(): with sshtunnel.SSHTunnelForwarder( (host, 22), ssh_username='ssh_username', ssh_password='ssh_password', remote_bind_address=('127.0.0.1', 3306), local_bind_address=('127.0.0.1', 3306)) as tunnel: connection = mysql.connector.connect( user='db_user', password='db_password', host='127.0.0.1', port=3306, database='db', ) sql = "SELECT * FROM DATA" cur = connection.cursor(dictionary=True) cur.execute(sql) results = cur.fetchall() connection.close() return results if __name__ == '__main__': results = get_data() if len(results) > 0: for index in range(len(results)): result = results[index] print(result)