MySQL C/C++ Anwendungen mit mehr als einem Benutzer
-
Hallo,
erste Dinge die zu sagen sind, ich habe nicht viel C Erfahrung ein bisschen MySQL und PHP Erfahrung. Deswegen kann ich stellenweise auch nicht mehr als eine breite Beschreibung eines unerfahrenen Anfängers liefern und möchte das auch soweit ich kann. Für ein kleines C++ Programm .. stieß vom Nachdenken her auf ein Problem das sich wie folgt schildert.
(um die Praxis im Allgemeinen kurz zu erläutern; ich brauche ein bisschen Starthilfe! Bis jetzt komme ich nicht wirklich voran mit der Mysql/C Abfrage :/. Dazu vielleicht: habe ich ein 64bit System-Problem??
mysql_get_client_info(); liefert> fatal error LNK1120: 1 nicht aufgelöste externe Verweise.
Richtig eingestellt sind die includes und libmysql ? [hoffe ich/oder eine Kombination von beidem das er die Links nicht schluckt weil ich mit Compiler Einstellungen das noch nicht alles checke. Von VS nur weiß das ich zusätzliche Inkludierungen angeben muss. Die libmysql habe ich auch in den windows/system Ordner kopiert.])Mit meiner Anwendung sollen Mehrere Benutzer etwas in eine Tabelle eintragen können. Das Passwort der Datenbank soll verschlüsselt sein, damit es nicht deassembliert wird. Wie gesagt alles was die Sprache betrifft lerne ich sozusagen Parallel.. Damit wäre von meiner Seite eigentlich fast alles gesagt. Ausser halt echt bitte nicht gemein sein, es ist sicher viel für Anfänger. Aber (!!); ich denke obwohl ich die Sprache kaum beherrsche ein bisschen Schwimmhilfe (jeglicher Form ) gebrauchen kann und es gibt einfach vieles Unaufbauendes von dem her, was man so als "Antworten" liest.. "lern erstmal die Sprache" ist keine Antwort. Wenn man merkt das man nichts lernt da die Probleme zu groß sind dann drosselt man das Vorhaben ein wenig? (Wie?)
Soviel habe ich bis jetzt herausgefunden:Was andere geschrieben haben
Meinung1:
Die Verwendung zb. von Mysql password() ... sei nicht sicher, weil MySQL Open Source ist.Meinung2:
Der Aufwand das zu überlisten vergleichsweise groß und von der Machart her empfiehlt er dazu eine verschlüsselte Kombination Username/Passwort damits noch schwieriger zu knacken ist.Antworten und Meinungen bitte!!
Greets Julian
-
Vorweg: Dein Text liest sich so, als hättest Du deine Gedanken so wirr aufgeschrieben, wie sie dir in den Sinn gekommen sind.
zum Problem: Du hast einen Linkerfehler. Und zwar kann zu der Funktionsdefinition keine Implementierung gefunden werden. Dein Programm läuft übrigens noch nicht mal (deswegen kann auch die Funktion "nichts liefern").
Du musst die .lib Datei, die mit deinen MySQL Sourcen, die Du eingebunden hast, mitgekommen sein. Die diese Datei musst Du in den Projektoptionen unter "Linker" im Unterpunkt "zusätzliche Abhängigkeiten" eintragen. ggf. musst Du vorher noch den Punkt "zusätzliche Bibliotheksverzeichnisse" so anpassen, dass deine .lib auch gefunden werden kann.
-
Thx,
Ja ich fisch mich halt so durch.. ich bin noch nirgendwo heimisch geworden halt, dementsprechend lese ich eine Menge durch Foren und Google, der Zweck hierin soll ja auch ein bisschen sein das es aufgeräumter wird.
Zum Thread vielleicht, hier interessiert mich doch das Problem als solches, wie machen das Erfahrene Programmierer? Wie werden Datenbank Verbindungen aufgebaut wenn die Passwörter eigentlich nirgends vorkommen dürfen?Auf jedenfall hast du Recht mit dem Linker.
-
Bin noch dran, wirklich unglaublich .. was ich bisher alles gelesen habe, und welche Probleme da entstanden sind von anderen auch, alleine schon beim Linker für Mysql einzustellen.. Die libmysql habe ich angegeben jetzt bei zusätzliche Abhängigkeiten und auch den Ordner für Bibliothekverzeichnisse.
Das compilen geht zwar irgendwie aber das Programm bricht ab und er meint die LIBMYSQL.DLL wäre nicht auf dem System ( das ist schon etwas besser als die Fehlermeldung zuvor (dabei habe ich nicht den ganzen Code angegeben das sollte nur ein Beispiel dafür sein an welcher Funktion es scheitert ) ) .allerdings wird schon besser..
-
jucodument schrieb:
Meinung1:
Die Verwendung zb. von Mysql password() ... sei nicht sicher, weil MySQL Open Source ist.Das nennt sich "Security through obscurity". Es gibt immer wieder Leute, die meinen eine Software sei sicher, wenn man nicht weiß, wie sie funktioniert. Leute, die wirklich was von Sicherheit verstehen, sagen, dass erst die Offenlegung der Algorithmen eine wirkliche Verifikation der Sicherheit ermöglicht.
-
ich bins schrieb:
Leute, die wirklich was von Sicherheit verstehen, sagen, dass erst die Offenlegung der Algorithmen eine wirkliche Verifikation der Sicherheit ermöglicht.
Ich glaube Leute die wirklich was von Sicherheit verstehen werden eher sagen, das die Sicherheit abhängig von den Algorithmen ist (ungeachtet ob Open oder Closed Source).
-
Sie finden die MySql.Data.dll für das .NET Framework 2.0 normalerweise im Verzeichnis "C:\Programme\MySQL\MySQL Connector Net X.X.X\bin\.NET 2.0".
Ist das noch nötig? Jedenfalls kann ich keine Verweise hinzufügen "Es wurden keine Elemente gefunden" (ich kann nichts auswählen ausser Projekte im Menu Ordner.)
-
welche Algorithmen das sind sagt also die Qualität aus, aber wenn die doch für jedermann zu sehen sind? Die Meinung von einem war ja das es dann zu einfach herauszufinden ist??
-
asc was du sagst soll wohl eine Korrektur sein, ist ja eigentlich das Gleiche.
-
(Also keine Aussage über die Algorithmen ohne Offenlegung.)
-
hahaha Visual Studio implementierung ist standardmäßig bei der Installation von Connector nicht ausgewählt :s
-
1>c:\mysql32\include\config-win.h(23): fatal error C1083: Datei (Include) kann nicht geöffnet werden: "sys/locking.h": No such file or directory
-
habe also mingw runtimes installiert, jetzt
1>c:\mysql32\include\stddef.h(6): fatal error C1021: Ungültiger Präprozessorbefehl "include_next".
da fehlt hoffentlich nur eine lib/header? welche?
-
das macht so keinen Sinn ich kriege die Maschine nicht eingerichtet..
Den Objektkatalog habe ich gefunden habe auch eine Mysql.data.dll gefunden kriege diese aber nicht mehr Entfernt (war in VS Ordner) und also auch die von Connector so wie es aussieht nicht dazu.
Das ist komplett aus dem Ruder geraten, werde die Server und auch Entwicklungsumgebung wahrscheinlich alles wieder neu machen.
-
jucodument schrieb:
welche Algorithmen das sind sagt also die Qualität aus, aber wenn die doch für jedermann zu sehen sind? Die Meinung von einem war ja das es dann zu einfach herauszufinden ist??
Sehe es mal so: Wenn Du ein Schloss hast und Du weißt, wie es funktioniert, hast Du noch nicht den Schlüssel.
Wenn Du prüfen kannst, wie das Schloss aufgebaut ist, kannst Du prüfen, ob es Sinnvoll aufgebaut ist und eventuell, ob es gut gemacht ist.
Wenn Du ein Schloss hast, von dem Du nicht weißt, wie es funktioniert, dann kannst Du zwar prüfen, dass es mit dem mitgelieferten Schlüssel auf geht, aber kannst nicht prüfen, ob es nicht eventuell auch anders auf geht. Beispielsweise wenn Du ein Stück Draht rein steckst.
Genauso ist das bei Verschlüsselung in Software. Ein Algorithmus, den Du kennst, gibt dir nicht lange nicht den Schlüssel. Wenn ich beispielsweise eine Passwortprüfung baue, die das Passwort einfach in der Datenbank nach schaut, dann kannst Du dich noch immer in mein System einloggen, wenn Du keinen Zugriff auf die Datenbank hast.
Es geht sogar noch weiter. Der reine Algorthmus sagt schon mal einiges über die Qualität der Verschlüsselung aus. Ob der Algorithmus aber auch korrekt implementiert ist, kannst Du (bzw. ein Sicherheitsexpterte) nur prüfen, wenn Du den Source code hast.
Eine closed-source-Applikation könnte bei einer Passwortprüfung ja beispielsweise auf ein fest codiertes Passwort prüfen, bevor es in den eigentlichen Verschlüsselungalgorithmus geht. Damit hat der Hersteller der Software immer eine Hintertür. Das geht bei Open-Source eben genau nicht.
-
Ich glaube ich bekomme die Schachtel langsam geöffnet.
Das Passwort ist schon verschlüsselt und ein Algorithmus packt es wenn die Anwendung läuft aus.
Mit dekompilieren kommt man dann nicht an den ganzen Code dran? Bei einer kleinen Anwendung fällt so eine Überlegung doch bestimmt ins Gewicht? :o
-
jucodument schrieb:
Ich glaube ich bekomme die Schachtel langsam geöffnet.
Das Passwort ist schon verschlüsselt und ein Algorithmus packt es wenn die Anwendung läuft aus.
Mit dekompilieren kommt man dann nicht an den ganzen Code dran? Bei einer kleinen Anwendung fällt so eine Überlegung doch bestimmt ins Gewicht? :oIch habe das Gefühl, du bekommst noch gar nichts geöffnet .
Du musst Algorithmus vom Schlüssel unterscheiden. Der Algorithmus sollte bekannt sein aber der Schlüssel nicht. Mit Dekompilierung hat das gar nichts zu tun.
-
Dabei verstehe ich genannte Vorgehensweise in dem Beispiel anscheinend noch nicht den verständlichen prinzipiellen Teil allerdings schon.
Den Schlüssel findet man doch im Code wenn man ihn dekompilieren oder assemblieren kann?In meinem Beispiel gibts ohne Passwort keine Datenbank? Wenn ich auf ein System zugreife was meinst du damit? Deswegen dachte ich auch schon an Leitungen abhören oder so, was mich hier jetzt garnicht so interessieren soll.
-
Ach jetzt verstehe ich Dein Problem. Deine Applikation braucht das Passwort, um sich an der Datenbank anzumelden und Du glaubst, wenn Du das Passwort in der Applikation fest codierst und die Applikation compilierst, dann hättest Du eine höhere Sicherheit erreicht. Ist es das?
Und ein weiteres Problem ist, dass Deine Fragen ein wenig kreativ formulierst. Versuche doch mal beispielsweise Deinen Satz:
jucodument schrieb:
Dabei verstehe ich genannte Vorgehensweise in dem Beispiel anscheinend noch nicht den verständlichen prinzipiellen Teil allerdings schon.
in korrektes, oder zumindest verständliches Deutsch umzuformulieren. Dann können wir Dir vielleicht besser helfen.
-
Ja; ich frage mich noch wie. Man kann einen compilierten Code ja wieder in Maschinensprache übersetzen und ich frage mich: eine kleine Anwendung ist ein leichtes Ziel für jemanden der damit umgehen kann oder nicht.
Okay da habe ich ein echtes Problem den Sinn in diesem Satz zu erfassen. Bin nicht sicher ob du ein "nicht" vergessen hast? Welches System ist gemeint?
Ein Algorithmus, den Du kennst, gibt dir nicht lange nicht den Schlüssel. Wenn ich beispielsweise eine Passwortprüfung baue, die das Passwort einfach in der Datenbank nach schaut, dann kannst Du dich noch immer in mein System einloggen, wenn Du keinen Zugriff auf die Datenbank hast.