[HOW-TO] MYSQL in Python

06/15/2014 12:56 Weedend#1
Hallo Elitepvpers,

Ich möchte euch heute zeigen wie ihr MySQL direkt in Python einbindet und euch somit den Weg über Quests spart.
Dies ist zum einen wesentlich sauberer als über eine zweite Programmiersprache zu gehen und zum anderen wesentlich einfacher.

ladet euch das Archiv aus dem Anhang herunter und packt es bei eurem Client in den "lib"-Ordner. Das MySQLdb-Modul wurde nicht von mir erstellt, jedoch vorkompiliert und leicht abgeändert.

In euren Python-Files könnt ihr nun mit
PHP Code:
import MySQLdb 
das Modul einbinden.

Achtung: Solltet Ihr eine MySQL-Datenbank mit einer Version höher als 4.1 besitzen muss ein User auf die OLD_PASSWORD_ENCRYPTION gesetzt werden, da in Python 2.0 - Python 2.2 nur MySQL 4.1 verwaltet werden kann und die neueren Versionen eine andere Passwort-Verschlüsselung verwenden.

Das ganze geht so:
PHP Code:
CREATE USER 'test'@'host';

SET PASSWORD FOR 'test'@'host' OLD_PASSWORD('password'); 



ACHTUNG: Die folgenden Befehle findet ihr alle im Internet !!!


Die Datenbankverbindung stellt ihr wie folgt her:
PHP Code:
    self.mysql MySQLdb.connect("host""username""passwort""datenbank"
Anschließend noch einen Cursor erstellen auf dem SQL-Statements ausgeführt werden:
PHP Code:
self.cursor self.mysql.cursor() 
Das Statement wird dann wie folgt abgesetzt:
PHP Code:
self.cursor.execute("SELECT * FROM tabelle WHERE something = 'irgendwas'"
Die Daten daraus erhalten wir so:
PHP Code:
self.daten self.cursor.fetchall() 
oder:
PHP Code:
self.daten self.cursor.fetchone() 
die Auswertung der Daten erfolgt so:
PHP Code:
        for row in self.daten:
             
row0 row[0]    
             
row1 row[1
mfG
Weedend
06/15/2014 13:15 Lord iRemix#2
Quote:
Originally Posted by Weedend View Post
Ich möchte euch heute zeigen wie ihr MySQL direkt in Python einbindet und euch somit den Weg über Quests spart.
Dies ist zum einen wesentlich sauberer als über eine zweite Programmiersprache zu gehen und zum anderen wesentlich einfacher.
Über Quests ist es um ein vielfaches sicherer.
Einmal den Client entpackt kann man mit deiner Methode alles mögliche anstellen.
Nett gemeint, aber es ist viel zu unsicher.
06/15/2014 13:19 Weedend#3
Naja du kannst die Connection ja compilen. Die pyc sind ja kein plaintext. Zudem sind die Clients mittlerweile doch eh alle verschlüsselt.

Wie sieht es bei Quests aus mit nem return?
wenn ich die zurückgelieferten Daten vom Server wieder in python verarbeiten möchte. Gibt es da eine Möglichkeit?
06/15/2014 13:23 .CHHorny#4
Quote:
Originally Posted by Weedend View Post
Naja du kannst die Connection ja compilen. Die pyc sind ja kein plaintext. Zudem sind die Clients mittlerweile doch eh alle verschlüsselt.

Wie sieht es bei Quests aus mit nem return?
wenn ich die zurückgelieferten Daten vom Server wieder in python verarbeiten möchte. Gibt es da eine Möglichkeit?
Du glaubst doch nicht wirklich das du es soweit verschlüsselst bekommst das es sicher ist? Zudem eine pyc ist nicht die Lösung dann.
06/15/2014 13:24 IgorGlock#5
Finger davon lassen!
Außerdem hat's sehr wenig mit M2 zutun... :)
06/15/2014 13:27 Mr.Xhater#6
wenn mann denn clienten auf bekommt würde ich sagen server in die tonne schmeißen
06/15/2014 13:53 .Inya#7
Naja solange man Cython verwendet sollte das klappen. Aber jmd der weis wie man Cython anwendet baut sich stumpf ein neues Packet dafür ein und machts über die game :D
06/15/2014 13:58 Lord iRemix#8
Quote:
Originally Posted by Weedend View Post
Naja du kannst die Connection ja compilen. Die pyc sind ja kein plaintext. Zudem sind die Clients mittlerweile doch eh alle verschlüsselt.

Wie sieht es bei Quests aus mit nem return?
wenn ich die zurückgelieferten Daten vom Server wieder in python verarbeiten möchte. Gibt es da eine Möglichkeit?
cmdchat
06/15/2014 14:25 .XXShuzZzle#9
Schau dir lieber nochmal an was überhaupt mit Strings in .pyc datein passiert^^.

Screen:
06/15/2014 14:49 DasSchwarzeT#10
Vor ca. 1,5 Jahren habe ich auch in Python mit MySql gearbeitet.. Aber bei den unsicheren Metin2 Clienten ist es viel zu gefährlich und über LUA funktioniert es ebenso gut.
06/15/2014 16:42 αddι#11
Man könnte einen neuen MySQL-Benutzer erstellen, dessen Rechte so weit eingeschränkt sind (GRANT / REVOKE), dass er eh nicht mehr machen kann, als die gewissen Daten zu verarbeiten, die er über Python verarbeitet.

Allerdings braucht dann jede Schnittstelle einen Nutzer und es wird extrem schnell sehr unübersichtlich und schon kleine Änderungen sind umständlich umzusetzen.

Ich persönlich würde mich für diese Methode auch niemals entscheiden, alleine aus Prinzip irgendwo irgendwelche heikle Daten zu hinterlegen, aber für jemanden der als Lösung nur diese Option sieht, wäre es eine Möglichkeit die Libary halbwegs sicher zu verwenden.
06/15/2014 17:18 .Kori#12
useless

Sehr unsicher und braucht man auch nicht
06/15/2014 17:26 [uLow]Beni#13
In einem Game Client darf man niemals Username oder Passwort einer DB speichern.

Da man auf jeden System die Send Funktion hooken kann und schon kann man mithilfe des Source Codes von MySQL den Usernamen und das Pwd auslesen.
06/15/2014 17:33 Antigene#14
Naja ich danke dir trotzdem wenn man ein bissn Brain.exe anwendet kann man damit viel anstellen und wenn dein Client verschlüsselt ist brauchste dir keine Sorgen machen

Allerdings sollte man RSA verschlüsselt die Daten speichern
06/15/2014 17:48 .HC'Destrox#15
Quote:
Originally Posted by Antigene View Post
Naja ich danke dir trotzdem wenn man ein bissn Brain.exe anwendet kann man damit viel anstellen und wenn dein Client verschlüsselt ist brauchste dir keine Sorgen machen

Allerdings sollte man RSA verschlüsselt die Daten speichern
Falsch.... Nur weil der Client verschlüsselt ist, kommt keiner an die Daten? Ich sag dir: wenn du die Methode verwendest, wirst du - falls du etwas höher kommst mit deinem Server, riesige Sicherheitsprobleme kriegen. Glaub mir oder glaub mir nicht - deine Entscheidung.

Kind Regards