Hallo zusammen!
Da bei meinen Projekten relativ komplexe Rechtevergabe auf Datenbankebene erfolgt (und dies unter Sicherheitsaspekten ja eigentlich generell so sein sollte), bin ich regelmäßig an folgendem Problem verzweifelt: Wie bekomme ich die ganzen "Grants" von einem Server zum anderen migriert? Beispielsweise wenn die Benutzer vom Testserver auf den Produktivserver "kopiert" werden sollen.
Unter Linux bieten sich hierfür die Percona-Toolkits an, unter Windows ist das zwar auch möglich, aber ziemlich umständlich weil man sich vorher noch eine Perl-Umgebung aufsetzen muss. Daher nutzen wir das Programm HeidiSQL für dieses Tutorial.
HeidiSQL bietet zwar für den Transfer von Tabellen und ganzen Datenbanken ein sehr einfaches Werkzeug, vergleichbares für die
MySQL-Benutzer ist aber nicht vorgesehen.
Folgende Voraussetzungen müssen erfüllt sein, damit dieses Tutorial funktioniert:
- HeidiSQL installiert und Bedienungskenntnisse dazu vorhanden
- Root-Zugriff auf die Datenbank "mysql" auf beiden Servern
- Verbindung zu beiden Servern im HeidiSQL-Verbindungsmanager konfiguriert
- Die Namen der Datenbanken sind auf dem Quell- und Zielserver identisch
Bevor wir mit unserem Experiment beginnen, legen wir uns natürlich von beiden Servern bzw. Datenbanken (Quelle und Ziel) Backups an. Man weiß ja nie...
Zunächst öffnen wir die Benutzerverwaltung der
Quelldatenbank. Auf der linken Seite sehen wir die vorhandenen Benutzer. Es ist nicht ungewöhnlich, dass Benutzernamen hier mehrfach erscheinen. Man kann in
MySQL jedem Benutzer vorgeben, von welchen Hosts aus er sich anmelden darf. Gibt es mehrere solcher Anmelde-Quell-Hosts, so erscheinen entsprechend für diesen Benutzer mehrere Einträge in der Benutzerverwaltung.
Wir notieren uns die Benutzer, die migriert werden sollen. Ich mache dies immer in Form einer Tabelle auf Schmierzettel: Benutzername, Host und Passwort (Achtung: Das Passwort wird in HeidiSQL nur verschlüsselt angezeigt, man muss das Klartextpasswort kennen).
Wir schließen nun den Verbindungsmanager der
Quelldatenbank und öffnen den der
Zieldatenbank. Hier legen wir die selben Kombinationen aus Benutzername, Host und Passwort manuell an, vergeben aber keinerlei Grants. Wir speichern die neu angelegten Benutzer und schließen den Verbindungsmanager.
Nun öffnen wir auf dem
Quellserver die Datenbank "
mysql" und klicken im Baum links mit der rechten Maustaste auf den Eintrag "
mysql" und im Kontextmenü auf "Datenbank
SQL-Export". Es öffnet sich das Fenster "Tabellen-Werkzeuge". Im Baum links
entfernen wir den Haken bei "
mysql" und klappen diesen Eintrag stattdessen auf, sodass wir die einzelnen Tabellennamen sehen. Nun haken wir die Einträge "columns_priv", "
db", "procs_priv", "proxies_priv" und "tables_priv" an.
Auf der rechten Seite im Reiter "
SQL Export"
entfernen wir
alle Haken bei Datenbanken löschen/erzeugen und Tabellen löschen/erzeugen. In der Combobox "Daten" wählen wir "INSERT" aus.
Nun können wir entweder die Grants direkt auf den Zielserver übergeben, indem wir in der Combobox "Ausgabe" den betreffenden Zielserver auswählen und dann in der Combobox "Datenbank" den Eintrag "
mysql" wählen.
Aber Achtung! Dies funktioniert nur dann, wenn Quellserver und Zielserver
exakt identische Benutzer und Grants haben sollen. Es werden nämlich
sämtliche Grant-Einträge kopiert.
Besser ist es, man lässt sich den Export als
SQL-Script ausgeben. Entweder per Zwischenablage ("Ausgabe" = "Clipboard") oder als Datei. Im Anschluss kann man das Script bearbeiten, überflüssige Einträge entfernen und/oder Namen von Datenbanken umschreiben, falls diese auf dem Zielserver anders heißen. Anschließend kann man dieses Script als Abfrage auf dem
Zielserver ausführen.
So, das wars schon. Die Grants sind ohne umständliches Geklicke in der Benutzerverwaltung migriert.
Grüße
Euer Cody