MySQL Benutzer Rechte, muss unbedingt?

salo

Mitglied
Hallo,
ich arbeite mit mysql und in eine Datenbank habe ich user tabelle. Es ist alles was ich über benutzer habe (Name Nachname,paswort und e-mails z.B.)
Die Benutzer loggen sich ein können nach ihrer recht (wie dieses Forum) manche aktionen durch führen.

Ich lese oft, dass in mysql man (in mysql datenbank) die benutzer eintragen muss und rechte vergeben muss. Die benutzen ja nicht direkt Datenbank sondern über die Sktipte, die ich fest geschrieben habe, können die nur manche zugriffe (lesen,schreiben...) machen . Beim login frage ich nur passwort und Name. Dann vergleiche ich die mit datenbank...Es reichts eigentlich...ich meine lauft mindestens, danach mit andere aktivitäten bis logout geht's auch.

Mache ich was falsch, gibt's Konsequenten?
Danke
 
ähem.....

Ich habe den leichten Verdacht, was du uns eigentlich fragen wolltest.

Wenn du auf deiner Page nicht bestimmte Funktionen implementiert hast, die nur bestimmte User benutzen sollen (z.B. ein CMS rein für dich), dann kannst du dir die Rechte-Verteilung auch schenken, da du eh nicht mehr zulässt, als durch deine Skripte.

Rechte brauchst du erst, wenn du zwischen deinen Usern unterscheiden willst

shutdown
 
Die Benutzer deines Programms und die User in der Mysql-Tabelle sind nicht das gleiche.

Jeder der deine MySQL Datenbank benützt wird einem Benutzer zugewiesen. Wenn du selbst an deiner Datenbank rumschraubst machst du das wahrscheinlich mit dem User root dessen Passwort und Name bereits nach der Installation entsprechend vorhanden ist.

Wenn du mit deinem Tool (PHP oder was immer) zu deiner Datenbank eine Verbindung aufbaust (im Falle von PHP wäre das mysql_connect(Server,User,PW) ) dann ist der User in dem Falle nicht das was in deinem Webtool als User bekannt ist, sondern was die Tabelle Mysql unter User versteht.

Kleines Beispiel:
In der User Tabelle von Mysql steht:
Host: %; User: webuser; Password: PASSWORD(Irgendwasverschlüsseltes); Weitere Werte: Die gesamten Rechte dieses Users

Weiter wäre ein Eintrag in der Tabelle db sinnvoll, aber das lassen wir jetzt mal.

Gut, nachdem du nun den User "webuser" erstellt hast, willst du mit PHP zur DB connecten. Da du ja nicht willst, dass die Leute, die dein Tool benützen root-Rechte erhalten (damit könnten sie (wenn unsauber programmiert) per SQL-Injections deine ganze DB löschen) schreibst du beim Connect Befehl:

mysql_connect("localhost","webuser","Irgendwasverschlüsseltes");

Und voilà: Alle deine User benützen den "webuser" mit den jeweiligen Rechten die du in der Mysql-tabelle angegeben hast. Sinnvoll in dem Fall wäre, dass du SELECT, INSERT, UPDATE und DELETE Rechte vergibst. Alles andere würde ich mal auf 'N' setzen, bevor du nicht genau weisst, was die Rechte alles bewirken.
 
Danke für beide Antworte. Man merkt, wie die anderen über ein Thema anders um gehen und dadurch gewinnt man andere Blicke.

Besonders an Shutdown, was ich genau fragen wollte: wie TVE völlig recht hat erste connection mache ich mit root recht! Aber danach solloen die normale benutzer sich einloggen und das mache ich in Skript durch abfrage zu datenbank, ob so ein benutzer gibt und passwort ihm gehört...Wenn ja kann der Benutzer einpaar skripte weiter laufen,durch session stelle ich immer fest, dass es um den selbe benutzer handelt und er nur durch meine begrenzte Skripte etwas tun(?) Um den erste (beim login )abfrage machen zu können ist benutzer sozusagen mit root rechte zum datenbank eingeloggt.
Kann der benutzer trotz nur begrenzte Skripte etwas böses tun ohne ich merke?
Daher war meine frage, ob man in mysql benutzer unbedingt mit begrenzte rechte ertellen soll? Eigentlich habt ihr nach meiner meinung meine frage richtig vertsanden, ich denke es hilft mir schon!
Danke
p.s.: aber wenn es etwas wichtiges zu wissen gibt, würde ich mich freuen, für die Bescheid.
 
Zuletzt bearbeitet:
Das ist ja genau der Punkt, warum man den User NICHT mit root-Rechten rumlaufen lassen soll.

Also merken:
Alles was in der Mysql-Tabelle steht regelt, was ein Benutzer an der Datenbank selbst tun darf. Wenn du ihm den DROP Befehl wegnimmst (was man beim User root nicht machen soll, da du dann deine eigene Datenbank nicht mehr löschen kannst, und das wär doch , wenn du einen Fehler gemacht hast) dann kann er nicht mehr deine DB löschen, auch wenn er eine Schwachstelle in deinem Script findet.

Alle User in deiner eigenen DB gehen nur dein Tool etwas an. Das hat nichts mit RECHT zu tun. Rechte setzen bezieht sich nur auf Rechte bezüglich der Datenbank (und nicht deinem Tool).

Also nochmals: Die User in deiner DB sind etwas anderes als die User in der Mysql Tabelle.

Und bitte, leg einen gesonderten User für alle an, die zu deinem Tool connecten. Lass sie nicht mit root connecten! Sehr schlecht.

Und wenn du es mir nicht glaubst:
Schick mir den Link zu deinem Tool (wenn du es denn online hast) und ich zeig dir was ein User mit root Rechten so alles anstellen kann, wenn man ihn nur lässt.
 
Danke,
im Moment habe es als test phase. Lauft nur local. Aber ich glaube Dir.
Dann aber eine FRAGE: Wenn der Tool nicht mit der root-rechte sich mysql connect, wie soll er sich für verschiedene user mit verschidene passworts merken. Der ist nicht eingeloggt aber der stellt fragen an Datenbank. Upps ich glaub gerade finde ich eigene Lösung (vielleicht): Fragt er mit gegebene Passwort ob er sich einloggen darf (durch connect), wenn daten falch fehler meldung stimmt?
 
Ich denk du verstehst noch nicht ganz wie ichs gemeint habe:

Also, bisher hast du alle deine Benutzer mit root zu deiner DB connecten lassen.

Das ist aber nicht gut, denn dann haben sie zu viele Rechte bezüglich der Datenbank, d.h. im schlimmsten Fall kann dir einer alle Datenbanken löschen. Da du das sicherlich nicht willst (ausser du bist ein masochist ;) ) legst du für alle deine Webuser einen eigenen User an (nur einen!) mit welchem du den mysql_connect Befehl in deinem PHP Script ansprichst.
Danach musst du dich nie mehr um diesen Webuser kümmern, es ist nur beim connecten wichtig, dass du das nicht mit root machst, sondern mit dem von dir erstellten user in der mysql-tabelle.

Ich geb dir nen Tipp: Schau auf mysql.com nach und lies unbedingt den Teil mit den Rechten, schau vielleicht auch mal das GRANT Statement an. Es ist wichtig, dass du verstehst, wozu die ganze Sache mit den Rechten dient. So lange dein Script 100% Fehlerfrei ist, brauchst du solche eingeschränkte Rechte für deine User nicht, aber wenn du dir bei deinem Code nicht ganz sicher bist, setze unbedingt Rechte. Das erspart dir möglicherweise einen Haufen Ärger.
 
Zurück