[Swift] MySQL in Swift

  • Ersteller Mitglied 189256
  • Erstellt am

Mitglied 189256

Gast
Hallo, ich habe schon einiges an Erfahrung mit Programmierung in viel zu vielen Programmiersprachen. Jetzt möchte ich meine Kenntnisse auch um Swift erweitern, das ist erstmal auch kein Problem, da ich mich schon etwas eingearbeitet habe.
Jetzt stehe ich aber vor einem kleinen Hindernis, und zwar suche ich nach einer native Möglichkeit, mich mit einer MySQL-Datenbank zu verbinden. Nativ meint hier, ohne Komponenten und Bibliotheken von Drittanbietern.
Das einzige, was man dazu im Internet findet, ist, dass man das bloß nicht machen solle, sondern lieber einen Webservice dazwischen schalten solle. Aber das ist für mich keine Option, da ich mich direkt verbinden möchte.
Kennt ihr vielleicht eine Möglichkeit, das zu machen. Am besten ohne Objectiv-C Bestandteile, da ich diese Programmiersprache, ehrlich gesagt, nicht mag. Da ist sogar Delphi besser ;)
 

Scotch

Bittenfelder Apfel
Registriert
02.12.08
Beiträge
8.029
Hast du denn verstanden, warum man nicht von irgendeiner App direkt auf eine SQL-DB zugreift?

Falls nein: Lass' es einfach.

Falls ja: Die Lösung ist offensichtlich: JSON Parser in deiner App implementieren und damit die notwendige Zwischenschicht in die App verlagern.
 

Mitglied 189256

Gast
Warum sollte es von einer iOS-App aus so gefährlich sein, auf eine Datenbank zuzugreifen, aber von einer Desktopanwendung oder einem externen Webserver aus nicht? Außerdem sind Sicherheitsrelevante Aspekte hier nicht das Thema. Ich dachte, ich hätte klar Ausgedrückt, dass es mir nich darum geht, sondern nur um die Technik.
Zu der Zwischenschicht: Wenn es nur so gehen sollte, was ich, ehrlich gesagt, doof fände, weil recht komplex was empfiehlst du da? Einen Webserver und dann mit PHP, oder wie?
 
Zuletzt bearbeitet von einem Moderator:

Scotch

Bittenfelder Apfel
Registriert
02.12.08
Beiträge
8.029
Warum sollte es von einer iOS-App aus so gefährlich sein, auf eine Datenbank zuzugreifen, aber von einer Desktopanwendung oder einem externen Webserver aus nicht?

Dann schau' dir halt mal an, wie das so aussieht, wenn man das so macht. XBMC/Kodi ist ein prima Negativbeispiel dafür.

Ich dachte, ich hätte klar Ausgedrückt, dass es mir nich darum geht, sondern nur um die Technik.

Dann schweig' ich doch gleich stille und belästige den Experten nicht weiter mit Grundsätzen ordentlicher Programmierung.
 

Mitglied 189256

Gast
Dann schau' dir halt mal an, wie das so aussieht, wenn man das so macht. XBMC/Kodi ist ein prima Negativbeispiel dafür.
Was soll Kodi bzw. XBMC denn jetzt damit zu tun haben? Ein Media Center und die Nutzung von MySQL in Swift?

Dann schweig' ich doch gleich stille und belästige den Experten nicht weiter mit Grundsätzen ordentlicher Programmierung.
Mit unordentlicher Programmierung kenne ich mich nur zu gut aus, damit habe ich beruflich sehr viel zu tun. Aber nichts desto trotz brauchst du nicht Stille zu schweigen und darfst weiterhin Antworten geben.
 
Zuletzt bearbeitet von einem Moderator:

Karift

Jonagold
Registriert
09.10.15
Beiträge
23
Hallo Mief,

Scotch hat es ein wenig überspritz gesagt, aber ich glaube, er findet einfach einen direkten Zugriff auf MySQL nicht gut, wie so viele andere auch. (mich eingeschlossen).

Warum sollte es von einer iOS-App aus so gefährlich sein, auf eine Datenbank zuzugreifen, aber von einer Desktopanwendung oder einem externen Webserver aus nicht?

Weil für einen direkten Zugriff der Port des MySQL-Servers nach außen hin offen sein muss. Bei einer Desktopanwendung laufen die SQL-Server normalerweise über Localhost, oder einen JDBC/ODBC-Connector.
Ein Webserver connected sich normalerweise auch über localhost oder einen Connector.

Bei Dektopanwendungen oder externen WebServern, gibt es auch die Möglichkeit nur bestimmte IPs zuzulassen, was wiederum sicherer ist. Bei iOs-Anwendungen ist das nicht so einfach.

Lange Rede, kurzer Sinn: Ich bin auch gegen einen direkten Zugriff.
Der Umweg über einen WebService ist aber wirklich nicht so schlimm, wie du es dir vielleicht denkst.
Der WebService kann auf Serverseite nämlich genau die gleichen SQL-Befehle ausführen, die du über einen direkten Zugriff machen möchtest. Die Antwort ist dann nur eben in einem anderen Format. Dieses Format kann man aber auch generisch bauen.

Beispiel:
Du hast irgendwo in deinem Code eine Methode, die heißt: "getAllUserByCountry(country : "Germany")"
Bei einem direkten Zugriff müsstest du jetzt eine SQL-Methode schreiben, die dir die einzelnen Zeilen zurückgibt: (Pseudocode)

let sqlQuery = "Select * from user where country like ?"
let results = executeQuery(sqlQuery, country)

var userArray = [User]()
while row in results {
let user = new User()
user.name = row["name"]
...
row.next()
}

return userArray

Bei einem WebService würde der SQL-Befehl gleich bleiben, du gibst dann eben nur ein JSON oder ähnliches zurück.

P.S.: Mir ist auch eingefallen, dass man sich bei einem WebService über SSL weniger gedanken über "Man in the Middle" machen müsste, als bei einem direkten Zugriff auf eine MySQL-Datenbank.

Edit: Ich habe extra meinen Code nicht in Codeblöcke gesteckt :) Sollte nur ein wenig Pseudocode sein.
 

Mitglied 189256

Gast
Das mit dem Man in the Middle ist natürlich ein Problem, daran hatte ich auch schon gedacht. Aber könnte man da nicht auch einfach die MySQL Verbindung per SSL verschlüsseln? Denn dann sollte das doch kein Problem mehr sein. Und ohne Zugangsdaten kommt man ja eigentlich auch nicht an die Daten ran, selbst wenn der Port nach außen hin offen ist. Oder hat MySQL da irgendwelche Sicherheitslücken, die nicht sonderlich öffentlich bekannt sind?
 

Pii

Rheinischer Krummstiel
Registriert
25.06.07
Beiträge
383
Die Frage "ob Lücken existieren" ist überflüssig.

Merke:
1. Jede Software enthält Fehler und somit Sicherheitslücken. - Selbstverständlich auch MySQL.
2. Nur weil Lücken Dir (oder jemand anderem) nicht bekannt sind heisst das nicht, dass sie nicht bereits genutzt werden.
3. Es besteht permanent die Gefahr von Konfigurationsfehlern.


P.S.: Bedenke insbesondere die Lücken sind gefährlich, die nicht öffentlich bekannt sind. 0-Days. Weil die nicht gefixt sind.
 
Zuletzt bearbeitet:

Mitglied 189256

Gast
Das sind natürlich Argumente...
Aber da es anscheinend eh keine native Möglichkeit gibt, sich direkt mit MySQL zu verbinden, fällt der Punkt dann sowieso raus ;)
 

smoe

Roter Winterkalvill
Registriert
13.04.09
Beiträge
11.575
exploits_of_a_mom.png
 

Mitglied 189256

Gast
Das ist ja ganz nett, aber MySQL-Injektion hat mit dem Thema mal so gar nichts zu tun.
 

smoe

Roter Winterkalvill
Registriert
13.04.09
Beiträge
11.575
Doch schon, denn so ein Dienst zwischen deiner App und der Datenbank kann dich vor sowas schützen. Und wenn du schon keine Lust hast dich damit zu beschäftigen, dann hast du vermutlich auch keine Lust deine Eingaben entsprechend zu prüfen...
 

Mitglied 189256

Gast
Trotzdem hat MySQL-Injektion mit dem Thema nichts damit zu tun, wie ich mich mit einer Datenbank verbinde. Ich kenne das Problem und hatte bisher auch nie Probleme mit sowas, da man das mit Prepared Statements ganz einfach umgehen kann.
Und da du überhaupt nicht weißt, was ich vor habe, ist dieser Einwand sowieso unnötig. Denn bei meinem Vorhaben ist MySQL-Injektion erst gar kein Problem.
 

ecco55

Tokyo Rose
Registriert
26.10.14
Beiträge
71
Warum nicht einfach CloudKit nutzen ? Apple bietet da schon super Möglichkeiten. CloudKit ist sicher und sehr einfach zu integrieren eisseiden man möchte es unabhängig und auch ausgefallener haben.
 

Mitglied 189256

Gast
Du meinst CloudKit anstatt MySQL als Datenspeicher? Das wäre leider keine Option.
 

Pii

Rheinischer Krummstiel
Registriert
25.06.07
Beiträge
383
Das sind natürlich Argumente...
Aber da es anscheinend eh keine native Möglichkeit gibt, sich direkt mit MySQL zu verbinden, fällt der Punkt dann sowieso raus ;)
Nur via ObjC. - Siehe Framework von Sequel Pro
 

Mitglied 189256

Gast
Danke, das werde ich mir dann mal anschauen.
 

lachendeTastatur

Erdapfel
Registriert
16.04.20
Beiträge
4
Hallo Leute, ich habe mich seit 2 Jahren jetzt mit Java beschäftigt und mittlerweile beherrsch ich auch MySQL soweit das ich eine Android App mit einer mySQL Datenbank verbinen kann. Nun will ich Swift lernen. Ja ich weis das hört sich mehr nach zu viel Motivation als Durchhaltevermögen an. Jedoch würd ich jetzt gerne auch mit Swift Apps prgrammieren lernen. Um es besser auszudrücken. Auch die Anbindung der App mit einer MySQL Datenbank. ich hab mir euren Chat durchgelesen und konnte soweit folgen. Inzwischen sind zwar 5 Jahre vergangen aber hoffentlich könnt ihr mir (einem "Anfänger) weiterhelfen. Wie verbind ich die IPhone App mit einer MySQL Datenbank.Oder gibt es da izwischen auch anedere Möglichkeiten wie ihr schon drüber diskutiert habt. Hoffe die Erklärung ist nicht allzu verwirrend
 

Dx667

Stina Lohmann
Registriert
26.11.17
Beiträge
1.037
Indem du dir einen Webdienst dafür schreibst.
Wenn du die Android App schon hast brauchst du ja nur auf den gleichen Dienst zugreifen.