Weiter zum Inhalt

Dürfen es ein wenig mehr MySQL Userrechte sein?

Gestern ist es mir wieder passiert. Ich wollte eigentlich „mal schnell“ einen neuen Datenbanknutzer meinem MySQL Server hinzufügen. Da ich noch nicht weiß, ob ich eventuell für das gleiche Projekt noch ein paar andere Datenbanken brauche, wollte ich jedoch, das der neue Nutzer gleich Rechte auf mehrere Datenbanken hat. In diesem Fall habe ich zwar schon großzügige Anwandlungen, das Vertrauen sollte aber nicht zu weit gehen und es soll die Einschränkung gelten, das nur Datenbanken mit einem bestimmten Präfix unter die Macht des neuen Nutzers fallen.

Klingt ja soweit noch verständlich – also zumindest für mich. MySQL bringt auch entsprechende Bordmittel mit – beim GRANT Statement hat nämlich das %-Zeichen eine Sonderstellung. Es wird, genauso wie bei LIKE in WHERE Bedingungen, als Wildcard angesehen. Das verwirrt ein wenig, ist doch der Platzhalter für „alle Tabellen in der Datenbank“ ein Asterisk (*).

Was mir jetzt wirklich passiert ist? Nun, die genaue Syntax war mir mal wieder entfallen. Ich wußte, das ich einen Nutzer „wewiki“ anlegen will und das dieser Datenbanknutzer auf alle Datenbanken mit dem Präfix „wewiki_“ Zugriff haben und diese auch erstellen können soll. Natürlich soll „wewiki“ auch auf alle enthaltenen Tabellen zugreifen können. Ein Verbinden soll aber nur vom lokalen Rechner erfolgen können.
Würde es sich um eine Datenbank handeln wäre das GRANT Statement schnell zur Hand:

GRANT ALL ON wewiki_wiki.* TO wewiki@localhost IDENTIFIED BY 'very secret password';

Dann hätte der Nutzer „wewiki“ jedoch nur Rechte auf die Datenbank „wewiki_wiki“. Da ich nun zu den fauleren Administratoren gehöre, wenn es um Datenbanknutzer geht, ist mir der daraus resultierende Aufwand, für jede neue Datenbank dem Nutzer dediziert Rechte zu geben, irgendwie zu hoch. Den Platzhalter % kann man aber nicht einfach so notieren. Und genau das ist mir wieder entfallen. Wie, verdammt noch mal, war denn die Syntax?! Nun, für jeden, der sich diese Frage auch stellt, hier die Antwort:

GRANT ALL ON `wewiki_%`.* TO wewiki@localhost IDENTIFIED BY 'a much more secret password';

Die Backticks (`) sind das kleine Details, was mein Administratorherz höher schlagen lässt. Denn nach diesem SQL Befehl hat der Nutzer „wewiki“ Rechte auf alle Datenbanken, die mit „wewiki_“ beginnen – also genau das, was ich haben wollte.

Kommentar verfassen

Dein E-Mail wird nicht veröffentlicht oder weitergegeben. Pflichtfelder sind mit * markiert.

By continuing to use the site, you agree to the use of cookies. more information

The cookie settings on this website are set to "allow cookies" to give you the best browsing experience possible. If you continue to use this website without changing your cookie settings or you click "Accept" below then you are consenting to this.

Close