Dies tritt häufig auf, wenn Ansichten/Trigger/Prozeduren von einer Datenbank oder einem Server zu einer anderen exportiert werden, da der Benutzer, der dieses Objekt erstellt hat, nicht mehr existiert.
Sie haben zwei Möglichkeiten:
1. Ändern Sie den DEFINER
Dies ist möglicherweise am einfachsten, wenn Sie Ihre Datenbankobjekte zum ersten Mal importieren, indem Sie alle DEFINER
entfernen Anweisungen aus dem Dump.
Das spätere Ändern des Definierers ist etwas kniffliger:
So ändern Sie den Definer für Ansichten
-
Führen Sie diese SQL aus, um die erforderlichen ALTER-Anweisungen zu generieren
SELECT CONCAT("ALTER DEFINER=`youruser`@`host` VIEW ", table_name, " AS ", view_definition, ";") FROM information_schema.views WHERE table_schema='your-database-name';
-
Kopieren Sie die ALTER-Anweisungen und führen Sie sie aus
So ändern Sie den Definer für gespeicherte Prozeduren
Beispiel:
UPDATE `mysql`.`proc` p SET definer = '[email protected]%' WHERE definer='[email protected]%'
Seien Sie vorsichtig, da dies alle Definitionen für alle Datenbanken ändern wird.
2. Erstellen Sie den fehlenden Benutzer
Wenn Sie bei der Verwendung der MySQL-Datenbank den folgenden Fehler gefunden haben:
The user specified as a definer ('someuser'@'%') does not exist`
Dann können Sie es lösen, indem Sie Folgendes verwenden:
GRANT ALL ON *.* TO 'someuser'@'%' IDENTIFIED BY 'complex-password';
FLUSH PRIVILEGES;
Von http://www .lynnnayko.com/2010/07/mysql-user-specified-as-definer-root.html
Dies funktionierte wie ein Zauber - Sie müssen nur someuser
ändern an den Namen des fehlenden Benutzers. Auf einem lokalen Entwicklungsserver verwenden Sie normalerweise einfach root
.
Überlegen Sie auch, ob Sie dem Benutzer tatsächlich ALL
gewähren müssen Berechtigungen oder ob sie mit weniger auskommen könnten.