Problem : Sie versuchen, Daten (mithilfe der mysqldump-Datei) in Ihre mysql-Datenbank zu importieren, aber anscheinend haben Sie keine Berechtigung, diesen Vorgang auszuführen.
Lösung : Angenommen, Ihre Daten werden in Ihrer MySQL-Datenbank migriert, gesetzt und aktualisiert. Erstellen Sie mit mysqldump einen Snapshot und exportieren Sie ihn in eine Datei
mysqldump -u [username] -p [databaseName]
Aus der MySQL-Dokumentation:
GTID - Eine globale Transaktionskennung (GTID) ist eine eindeutige Kennung, die für jede auf dem Ursprungsserver (Master) festgeschriebene Transaktion erstellt und zugeordnet wird. Diese Kennung ist nicht nur für den Server eindeutig, von dem sie stammt, sondern für alle Server in einem bestimmten Replikationssetup. Es gibt eine 1: 1-Zuordnung zwischen allen Transaktionen und allen GTIDs.
--set-gtid-purged = OFF SET @@ GLOBAL.gtid_purged wird der Ausgabe nicht hinzugefügt, und SET @@ SESSION.sql_log_bin = 0 wird der Ausgabe nicht hinzugefügt. Verwenden Sie für einen Server, auf dem GTIDs nicht verwendet werden, diese Option oder AUTO. Verwenden Sie diese Option nur für einen Server, auf dem GTIDs verwendet werden, wenn Sie sicher sind, dass der erforderliche GTID-Satz bereits in gtid_purged auf dem Zielserver vorhanden ist und nicht geändert werden sollte, oder wenn Sie fehlende GTIDs manuell identifizieren und hinzufügen möchten.
Stellen Sie anschließend mit dem Benutzer root eine Verbindung zu Ihrer MySQL her, erteilen Sie Berechtigungen, leeren Sie sie und überprüfen Sie, ob Ihre Benutzerrechte korrekt aktualisiert wurden.
mysql -u root -p
UPDATE mysql.user SET Super_Priv='Y' WHERE user='johnDoe' AND host='%';
FLUSH PRIVILEGES;
mysql> SHOW GRANTS FOR 'johnDoe';
+
| Grants for johnDoe |
+
| GRANT USAGE ON *.* TO `johnDoe` |
| GRANT ALL PRIVILEGES ON `db1`.* TO `johnDoe` |
+
Laden Sie nun die Daten neu und der Vorgang sollte zulässig sein .
mysql -h [host] -u [user] -p[pass] [db_name] < [mysql_dump_name].sql
DEFINER
wenn der angemeldete Benutzer nicht über dieSUPER
Berechtigung verfügt (die selbst in RDS nicht zulässig ist), eine willkürliche Eskalation von Berechtigungen ermöglichen würde - gespeicherte Programme werden mit den Anmeldeinformationen und Berechtigungen ihrer Benutzer ausgeführtDEFINER
(im Gegensatz zu denen des anrufenden Benutzers - dessenINVOKER
), standardmäßig. Auch bei Serverfehler .