Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL-Fehler 1449:Der als Definierer angegebene Benutzer existiert nicht

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

  1. 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';
    
  2. 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.