MySQL Remote Zugang

Mutschas

New Member
Hallo zusammen,

ich habe heute meinen Server so eingerichtet, dass nur über eine externe Server-IP, zusätzlich zu den localhost-Verbindungen, auf den MySQL-Server verbinden kann.

Jetzt habe ich ein Problem:
Ich habe viele MySQL-User / Datenbanken und möchte aber, dass nur ein User / eine Datenbank von extern abgefragt werden darf.

Derzeit könnte sich jeder DB-User von dem externen Server anmelden (sofern das PW bekannt ist). Genau das möchte ich verhindern.

In der mysql.db-Tabelle stehen die Benutzer immer doppelt drin. Einmal mit "%" als Host und einmal mit "localhost". Ich denke, dass das Problem beim "%"-Hosteintrag liegt.

Habt ihr eine Idee, wie ich das System so präparieren kann, dass nur ein bereits vorhandener User, sagen wir XYZ auf die Datenbank, sagen wir ABC zugreifen kann und alle anderen Versuche, sich mit einem anderen Benutzer anzumelden, scheitern?

Lokal sollen natürlich weiterhin alle zugriff haben.

Vielen Dank!
 
Habt ihr eine Idee, wie ich das System so präparieren kann, dass nur ein bereits vorhandener User, sagen wir XYZ auf die Datenbank, sagen wir ABC zugreifen kann und alle anderen Versuche, sich mit einem anderen Benutzer anzumelden, scheitern?
Uhm, indem du alle Remote User rauswirfst und dann einen mit den angegebenen Restriktionen erstellst?
Falls du dabei Probleme hast - wo genau?
 
Falls du dabei Probleme hast - wo genau?
Offensichtlich grobes mangelndes Unverständnis bzgl. der mySQL-Benutzer-/Rechteverwaltung.

Das "%" nennt man wildcard und diese Art Einträge solltest Du löschen. Nur der User, der sich remote einloggen darf, sollte den Platzhalter "%" haben.

Ansonsten möchtest Du Dich tiefer in die Materie einlesen, Dir scheint das Konzept der Benutzer-/Rechtverwaltung von mySQL nicht hinreichend vertraut zu sein. Und einen Remote-Zugang zur DB solltest Du auch entsprechend absichern.

http://dev.mysql.com/doc/refman/5.1/de/user-account-management.html
 
Sorry. Ich weiß, dass "%" als Wildcard genutzt wird. Ich meine aber mal gelesen zu haben, dass es Probleme geben könnte (lokal), wenn man "%" entfernt?

Das Problem ist auch, dass ich das "%" nicht von Hand bei allen Usern entfernen möchte. Gibts da nen SQL-Befehl, der das automatisiert?

Ich nutze i-mscp und der ist es, der mir immer "%" und "localhost" Einträge in die mysql.db rein schreibt...
 
Last edited by a moderator:
Wenn wir einmal ignorieren, dass ein von extern erreichbarer MySQL-Server ein eklatantes Sicherheitsrisiko und daher ein absolutes No-Go darstellt, sind die Berechtigungen für den entsprechenden User wie folgt zu setzen:

Code:
GRANT ... ON ABC.* TO 'XYZ'@'%' IDENTIFIED BY 'password';

Die "..." ersetzt du mit den Berechtigungen, die der User konkret benötigt, z.B. SELECT, UPDATE, siehe Tabelle:

http://dev.mysql.com/doc/refman/5.1/de/grant.html

Ein "GRANT ALL PRIVILEGES" wäre natürlich das einfachste, das wollen wir aus Sicherheitsgründen aber auf gar keinen Fall.

Was das i-mscp da macht, ist natürlich Quatsch. Das ist aber ein grundlegendes Problem dieser Admin-Tools.
 
Du hast die Passwörter doch schon alle, eben nur als Hash, den kannst Du ggf. 1 zu 1 weiterbenutzen.

So kannst Du das z.B. anzeigen lassen:

Code:
show grants for 'user'@'%';

Man kann ersatzweise auch die Tabellen in der Datenbank 'mysql' direkt abändern und danach 'FLUSH PRIVILEGES' ausführen. Da muss man aber halbwegs sicher mit SQL statements sein ^^
 
In diesem Falle würde ich eher den Einsatz von PHPMyAdmin empfehlen. Dann kann sich der TE seine User entsprechend zusammenklicken. Eine andere Option sehe ich auf Grund erheblicher Defizite im Know-How nicht.
 
remotezugriff entfernen:

Code:
use mysql; SELECT User FROM mysql.user WHERE Host = '%' AND Host = 'localhost';
+---------+
| User      |
+---------+
| TEST     |
| newuser |
+---------+
2 rows in set (0.00 sec)
Solange es nicht Hunderte im Ergebnis sind, sollte es doch gehn.

Code:
drop user 'TEST'@'%';
drop user 'newuser'@'%';
 
Last edited by a moderator:
Stimmt. Noch einfacher und schnell gemacht mit mysql in der Shell. Drop user lässt ja kein Subselect zu.
phpmyadmin braucht niemand bei solchen kleinen Sachen.
 
Last edited by a moderator:
Back
Top