Visual c# mit einer mysql datenbank verbinen ohne die zugangsdaten im programm in einen string oder in die App.config zu schreiben, Wie?

...komplette Frage anzeigen

3 Antworten

Wie LeonardM bereits schrieb, gibts dafür ausser einer Serverseitigen API nicht viele (eher gar keine Möglichkeit)...

Hier mal ein Beispiel:

Angenommen du hast einen Webserver unter der Domain api.mein-programm.de laufen, dann könntest du für den Loginvorgang z.B. das machen:

using System.Net;
public class APIClient{
public string LastError{get; private set;}
private string SessionId = "";
public bool Login(string username, string password){
WebClient client = new WebClient();
string response = client.DownloadString(string.Fhttp://api.mein-programm.de/login.php?username=ername={0}&password={1}",username,password));
if(response.StartsWith("+OK")){
this.SessionId = response.Substring(4);
this.LastError = "";
return true;
}
else{
this.LastError = response.Substring(5);
return false;
}
}
}
public class APITest{
public static void Main(string[] args){
APIClient api = new APIClient();
if(api.Login("Benutzer3874", "Alpha37291")){
Console.WriteLine("Login ok.");
}
else{
Console.WriteLine("Login failed: \"{0}\".", api.LastError);
}
}
}

In der login.php auf dem Server hättest du dann etwas in der Art:

<?php
if(!(isset($_GET['username']) && isset($_GET['password']))){
echo "-ERR Username or password missing.\n";
exit(0);
}
//Hier natürlich eine Überprüfung auf Basis der Datenbankdaten durchführen ;)
if($_GET['username'] === 'Benutzer3874' && $_GET['password'] === 'Alpha37291'){
$sessionid = md5(base64_encode($_GET['username']) . ":" . base64_encode($_GET['password']) . "@" . $_SERVER['REMOTE_ADDR'] . "T" . time());
//Die SessionId natürlich auch noch irgendwo speichern, da diese bis zum Logout verwendet wird, um diese Session zu identifizieren.
//P.S.: MD5 ist in diesem Fall tatsächlich noch zu gebrauchen, da es nicht darum geht, ein "Geheimnis" zu bewahren, sondern eher darum, eines zu erzeugen...
echo "+OK " . $sessionid . "\n";
}
else{
echo "-ERR Wrong username or password.\n";
}

P.S.: Dem aufmerksamen Leser wird wohl kaum entgangen sein, dass die Rückgabewerte dieser API an die von POP3 angelehnt sind (+OK = alles OK, -ERR = Fehler)

P.P.S.: Das ganze ist natürlich nur ein ungefähres Beispiel und sollte nicht ohne einige Anpassungen (Absicherung gegen SQL-Injection, ggf. HTTPS statt HTTP, etc... ;)  verwendet werden.

also auf gut deutsch ein programm am server das alles macht und der client holt sich alles vom server programm..?

0
@kmgeil

Kann man so sagen.

Im Prinzip sowas in der Art:

Auf dem Server ein in PHP (o.ä.) geschriebenes Backend, das auf Anfrage eine Verbindung zur Datenbank herstellt und das Resultat ausgibt, auf dem Client ein Programm (bzw. eine Funktion), das (bzw. die) die Anfrage an den Server stellt und die Antwort auswertet.

Also grob skizziert etwa das:

Client: Hey Server, authentifiziere Benutzer "Benutzer3874" unter verwendung von Passwort "Alpha37291"
Server: Okay, ich seh mal in der Datenbank nach.
Server: Ah ja, da ist er ja, sieht alles gut aus, für weitere Aktionen verwende Session ID "673afadb7b8e7b165c95d0597d0c7ebf"
Client: Hier Session "673afadb7b8e7b165c95d0597d0c7ebf", gib mir die Datensätze aus Tabelle "Jahresumsatzbericht_2016"
Server: Ok, die angeforderten Daten sind *Hier z.B. eine CSV-Tabelle o.ä.*
Client: Session "673afadb7b8e7b165c95d0597d0c7ebf" nochmal, bin jetzt fertig, die Session kann geschlossen werden.
Server: Bestätigt, Session ist geschlossen.
0

Gar nicht. Denke über ne serberseitige api nach zb über http oder https oder direkt tcp

Was möchtest Du wissen?