Login am MySql-Server über Login-System mit PHP

Davicito

Erfahrenes Mitglied
Hallo,

ich habe da mal eine allgemeine Frage, wie man sich an einem Sql-Datenbankserver mittels Login-Systems, in PHP, anmelden kann.

In vielen Videos oder Beispielen wird immer beschrieben, dass man dazu eine neue Tabelle (Login oder Account, etc) anlegen muss, in dem man dann User und Passwort - am besten mit Hash5 kodiert -> md5(); - speichert und dann mittels PHP auf die Tabelle zugreift um Passwort zu prüfen oder durch ein Registrierungsformular weitere Benutzer aufnimmt, die sich dann anmelden können.

Jetzt meine Frage. Der SQL-Server verfügt ja bereiz über einen User "root", welcher volle Berechtigungen hat. Wo ist denn das im MySQL-Server hinterlegt? Denn dazu finde ich keine Tabelle...Wenn ich jetzt wüste, wo der root-account liegen würde, könnte ich doch da auch alle User hinregistrieren und bräuchte doch auch so keine zusätzliche Tabelle für mein Login-System, oder? Denn ich will ja beim mysql_connect('db','root',' ') immer den Benutzer an meinem Datenbankserver anmelden und nicht immer root. Nur habe ich keine Ahnung wie man das hinbekommen könnte.

Über Tipps und Infos wäre ich Euch sehr dankbar.

Gruß.
 
Hi

du hast da anscheinend etwas missverstanden.

Du brauchst genau einen SQL-Benutzer: für PHP.
Da haben die menschlichen Benutzer deiner Seite nichts damit zu tun.

Mehrere SQL-Benutzer machen dann Sinn, wenn
jeder komplett eigene Tabellen hat
oder zumindest nicht jeder die selben Sachen in Tabellen darf (lesen/einfügen/ändern usw.)

Alle Benutzernamen/Passwörter, die sich auf deiner Website einloggen dürfe,
kannst du in genau einer einzigen Tabelle speichern.
PHP liest aus der/schreibt in die Tabelle und muss dafür der Datenbank
mit einem bestimmten Benutzernamen/Passwort beweisen,
dass es auf die Kennwörter der Menschen zugreifen darf.

Weiterer Nachteil, wenn die Benutzerlogindaten auch für die DB gelten:
Was wäre, wenn ich mich auf deiner Seite registriere,
dann statt auf der Website direkt in die DB einlogge und dort beliebige SQL-Befehle absetze?
Sowas soll einfach nicht sein.
Ein Benutzer der DB für PHP, fertig.


root für PHP zu verwenden ist übrigens eine schlechte Idee.
root darf alles, und PHP braucht ja die Zugangsdaten für "seinen" Benutzer.
Wenn jemand an deine PHP-Dateien drankommt
hätte er dann auch totale Kontrolle über deine DB.

Und wie kommst du auf den Namen "Hash5"?
Der Algorithmus hinter md5() heißt auch MD5.
(Umgekehrt...die Funktion wurde wegen dem Algorithmus so genannt).

Gruß
 
Hallo sheel

Du brauchst genau einen SQL-Benutzer: für PHP.
Da haben die menschlichen Benutzer deiner Seite nichts damit zu tun.
Gruß
folgende Anweisung gibt mir den Zugang auf meinen MySQL-Datenbankserver:

PHP:
...
&bla = mysql_connect('DB','User','Passwort');
...

Vorregistriert ist ein SQL-Nutzer 'root', ohne PW, mit vollen Nutzerrechten. Meine Idee dahinter war einfach nur, einen bzw. mehrere Nutzer mittels PHP-Loginsystem an dem Server zu registieren, welche ich mit den passenden Rechten ausstatte. So darf einer nur lesen, der andere lesen und ändern bzw. löschen.

Weiterer Nachteil, wenn die Benutzerlogindaten auch für die DB gelten:
Was wäre, wenn ich mich auf deiner Seite registriere,
dann statt auf der Website direkt in die DB einlogge und dort beliebige SQL-Befehle absetze?
Sowas soll einfach nicht sein.
Ein Benutzer der DB für PHP, fertig.
Gruß

Der Benutzer soll auch keine Möglichkeit haben sich selber über die PHP-Seite registrieren zu können. Meine Idee dahinter war, das nur der Administrator die einzelnen SQL-User anlegt und denen dann die Rechte zuordnet. So kann ein SQL-User sich nur anmelden, wenn er zuvor von dem Admin angelegt wurde.

root für PHP zu verwenden ist übrigens eine schlechte Idee.
root darf alles, und PHP braucht ja die Zugangsdaten für "seinen" Benutzer.
Gruß

Ich will ja auch nicht 'root' verwenden, sondern meine eigenen SQL-User anlegen (wie oben
beschrieben).

Wenn jemand an deine PHP-Dateien drankommt
hätte er dann auch totale Kontrolle über deine DB.
Gruß
Daher soll wenigstens das Passwort mit md5 kodiert werden und die session_id nach erfolgreichem Einloggen mit
PHP:
...
session_regenerate_id();
...
die Session_ID geändert werden.
Alles soll mit Sessiondaten realisiert werden. damit es ebend nicht mehr so leicht abgefangen werden kann.

Also nochmal zum Verständnis:
Jemand soll sich zuerst an meiner Webseite einloggen.
dabei wird geprüft wer sich überhaupt eingeloggt hat. (normaler User oder Admin)
alle Einlogdaten werden mittels Session verwaltet und das PW mittels MD5 verschlüsselt gehalten

Wenn ein User sich also anmeldet soll der Zugriff auf mein MySQL-Server mittels mysql_connect() eingeloggt werden, um mit seinen zugewiesenen Rechten Informationen aus meiner Datenbank zu erhalten

Hier mal ein Gedanken/Codeschnipsel von mir (ist noch nicht umgesetzt worden!)
PHP:
session_start();

$_SESSION['user'] = $_POST['user'];
$_SESSION['pw'] = md5($_POST['pw']);
$_SESSION['pw2'] = md5($_POST['pw2']);

if($_SESSION['pw'] == $_SESSION['pw2'])
{
    session_regenerate_id();
    &bla = mysql_connect('DB','".$_SESSION['user']."','".$_SESSION['pw']."');
...
}
else echo'Fehler!';
...

Kann man das überhaupt so machen, oder muss man immer eine extra Tabelle in der jeweiligen Datenbank anlegen um User und PWs zu verwalten?
Ich meine, wenn der SQL-Server schon eine User-Login mit Rechtevergabe bereithält, dann würde ich doch lieber diese verwenden, als wenn ich jetzt in jeder Datenbank auf dem Server immer eine extra Login-Tabelle anlegen müsste. Denn es sollen noch 2 weitere Datenbanken auf meinem MySQL-Server hinzukommen.
 
Zuletzt bearbeitet:
Von der Logik her finde ich es zwar einfacher die "User" von MySql mit MyPhpAdmin zu machen, wenn du aber über PHP arbeiten willst. dann stell sicher, dass nur der Admin der Site zugriff auf ein Formular zum User anlegen Löschen hat. Erstelle jeweils die Methoden für die Vorgänge und mach Felder für die Variablen der Rechte, die dann in den SQL Befeheln umgesetzt werden. Nur darf wirklich kein anderer die Möglichkeit haben auf dieses Formular oder die PHP dahinter
 
Hallo Rookie,
ja das wollte ich dann in PHP so abändern, das auch nur der Admin die User anlegen darf, sonst keiner. Wie gesagt das müsste ich dann auch noch bauen.

Zu Testzwecken, habe ich mal über phpMyAdmin zwei User angelegt und würde mich jetzt gerne mit diesen Usern einloggen.
PHP:
session_start();
$_SESSION['Usario'] = $_POST["bn"]; 
$_SESSION['llave'] = $_POST["pw"]; 
//$_SESSION['llave'] = md5($_POST["pw"]);

if(!empty($_SESSION['Usario']))
{  
    echo'"'.$_SESSION['llave'].'"'; 
	$link = mysql_connect('localhost', '"'.$_SESSION['Usario'].'"' , '"'.$_SESSION['llave'].'"')
    ...

}
else echo'Login fehlgeschlage! <br> Bitte geben Sie ein gültigen Benutzernamen und Passwort ein';
Nur leider bekomme ich die Meldung:

"Usertest"
Warning: mysql_connect(): Access denied for user '"Usertest"'@'localhost' (using password: YES) in C:\xampp\htdocs\Login.php on line 19
Verbindung zur Datenbank konnte nicht hergestellt werden

Line 19 ist die Zeile mit der mysql_connect()-Anweisung.

Habt Ihr eine Idee, woran das liegen könnte, bzw. eine bessere Lösung für mein Vorhaben?

Gruß.
 
Zuletzt bearbeitet:
Sorry, dann hab ich dich falsch verstanden.

Verschiedene SQL-Benutzer mit verschiedenen
Tabellenzugriffsrechten ausstatten ist natürlich möglich.

Das "Access denied": Hast du überhaupt einen User angelegt?

MD5 ist keine Verschlüsselung.
Und wenn du Sicherheit brauchst, nimm SHA statt MD5.
 
Das "Access denied": Hast du überhaupt einen User angelegt?

Ja ich hab mal einen User 'Usertest' mit gleichem Passwort angelegt
komisch nur, wenn ich folgendes mache:

PHP:
...
$link = mysql_connect('localhost', 'Usertest' , 'Usertest'); 
...

dann kann ich mich einloggen,
aber wenn ich das mit den SESSION-Variablen lösen will:

PHP:
...
$link = mysql_connect('localhost', '"'.$_SESSION['Usario'].'"' , '"'.$_SESSION['llave'].'"')
...
geht das Ganze nicht so!?
Hast Du ne Idee wieso das nun mit den SESSIONS nicht funktionieren will?
Kann das auch sein, dass wenn ich mal spaßeshalber eine Session-Variable mit echo absetzte, ich einen Wert mit doppelten Anführungszeichen erhalte, und es deshalb nicht funktionieren kann? *schlutz*

MD5 ist keine Verschlüsselung.
Und wenn du icherheit brauchst, nimm SHA statt MD5.

Danke für den Tipp... Werde ich nachlesen und ausprobieren ^^.
 
Zuletzt bearbeitet:
Oh mann.... ganz banaler Fehler wieder mit den Anführungszeichen!!
Folgender Code funktioniert:

PHP:
...
$link = mysql_connect('localhost', $_SESSION['Usario'] , $_SESSION["llave"]);
...
natürlich ohne die ganzen Anführungszeichen. Beim echo schreibt man auch nur:

PHP:
echo $_SESSION['Usario'];
und alles wird normal ausgegeben.
Das das bei den Session-Funktionen so anders ist als mit der Verwendung von POST- oder GET-Variablen, hätte ich jetzt nicht gewusst :-).

Danke für Eure Mühen******

Bis bald, Davicito.
 
Das ist auch bei POST und GET genau gleich.

Und ich versteh zwar immer weniger, was das werden soll,
aber DB-Zugangsdaten in der Session...öhm... :suspekt:
 
Hmmm... wie würdest du das machen?
Ich meine ich muss meine Seite ja irgendwie sichern mit Accounts und da meine Web-User über die Seite nur mit der DB zu tun habe, und SQL schon ein Anmeldesystem mitbringt, können sich doch die User mittels Session an der DB Registrieren und der User wird auf der Webseite begrüßt. Und mann soll nachher nachvollziehen können, wie lange jemand eingeloggt war und was er gemacht hat... Und das Ganze soll nachher als Protokoll.txt oder in der db hinterlegt werden, und da Session alle Daten solange speichert, wie die Seite offen ist bzw. durch session_destroy() alle User-Daten wieder löscht, bietet Session doch ne gute Lösung für mein Vorhaben... Oder giebt es da noch etwas anderes, außer Session? Ich weiß ja, Session ist nicht 100% sicher, aber was ist schon sicher?!

Gruß.
 

Neue Beiträge

Zurück