Mysql DB Zugriff über Pythonskript und SSH?

5 Antworten

Das ist ja gut so wenn die Datenbank von außen nicht Zugriff ermöglicht.

Ist doch aus Datenschutz Gründen korrekt

Entweder du konfigurierst mysql so, das externe Verbindungen zugelassen werden (bind-address, Benutzerrechte) oder aber du schaust wie Port Forwarding per ssh funktioniert, um über die bestehende ssh-Verbindung die MySQL-Verbindung zu tunneln (ssh -L ..) und verbindest dich mit python zum weitergeleiteten lokalen Port.

sitgo93 
Fragesteller
 01.11.2020, 21:16

ohne mein skript komme ich mit der mysqlworkbench auf die db müsste also irgendwie schon funktionieren, auch über das skript. aber das verweigert mir den Zugang.
Daten stimmen. Unten ist der Code

0
RakonDark  01.11.2020, 21:36
@sitgo93

was heist verweigert den zugang , MYSQL gibt eine concrete fehlermeldung aus wenn ein connection versuch gemacht wird, ggf sieht man es im mysql log .

0
iQa1x  02.11.2020, 01:03
@sitgo93

In dem Script verbindest du dich im python auf localhost. Das hat mit der SSH-Verbindung nichts zu tun, der verbindet sich halt mit deiner lokalen mysql-Instanz und findet dort dann user und Passwort nicht. Die Workbench wird sich auch mit der lokalen DB verbinden, nicht dem Server.

Dieser ssh-Client im Python scheint kein Port forwarding zu können, daher kannst du mit dem auch nicht die mysql-Verbindung tunneln. Du könntest (ohne ssh) dich direkt zu mysql verbinden, das musst du aber auf dem erst erlauben, wie oben geschrieben.

0

Wenn Du die SQL-Verbindung über den SSH-Tunnel aufbauen willst, musst Du das in deinem Script auch so ansprechen. Ohne Code kann man dir dabei kaum sagen was falsch läuft.

Alternativ dazu kannst Du auch am Datenbank-Server den Port 3306 in der Firewall freigeben und in MySQL einstellen, dass von außen dorthin verbunden werden darf. Dann müsste es auch ohne Tunnel funktionieren.

Woher ich das weiß:Berufserfahrung
sitgo93 
Fragesteller
 01.11.2020, 21:15
import paramiko
import pymysql
hostname = '***'
myuser   = '***'
mySSHK   = 'C:**'
sshcon   = paramiko.SSHClient()  # will create the object
sshcon.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # no known_hosts error
sshcon.connect(hostname, 5867, username=myuser, key_filename=mySSHK) # no passwd needed


# Connect to the database
connection = pymysql.connect(host='localhost',
                             user='**',
                             password='***',
                             db='***',
                             charset='utf8mb4',
                             cursorclass=pymysql.cursors.DictCursor)

try:
    with connection.cursor() as cursor:
        sql = "SELECT * FROM ***"

        cursor.execute(sql)

        results = cursor.fetchall()
        for row in results:
            print(row)
    connection.commit()
finally:
    connection.close()

das wäre der code.

0
sshcon.connect

und

connection = pymysql.connect

haben nix miteinader zu tun, der eine macht ein tunnel auf und der andere versucht einfach eine verbindng aufzubauen .

wieso sollte pymsql über sshcon laufen ? du machst 2 verbinundungen nebeneinander auf .

wie meinst du das ?

du musst schon mit login daten dich anmelden an die datenbank , und zwar eines was in der datenbank als login hinterleg ist mit entsprechenden rechten

SSH heist nur das du da eine Shell auf dem Rechner hast .

https://linux.die.net/man/1/mysql

sitgo93 
Fragesteller
 01.11.2020, 21:11

Ja das mache ich auch.

0