In diesem Artikel wird erläutert, wie Probleme behoben werden können, die auftreten können, wenn der DEFINER Das Attribut wird mit gespeicherten MySQL-Objekten (Ansichten, Trigger, Funktionen und gespeicherten Prozeduren) verwendet.
Problem
Möglicherweise treten beim Anzeigen oder Ausführen von gespeicherten MySQL-Objekten (Ansichten, Trigger, Funktionen und gespeicherte Prozeduren) Probleme auf. Beispielsweise erhalten Sie möglicherweise die folgende Fehlermeldung in phpMyAdmin:
Error in processing request: No routine with name 'example' found in database 'example_db'. You might be lacking the necessary privileges to edit this routine.
Alternativ können beim Betrieb der Website scheinbar zufällige Fehler oder ein Verlust der Datenbankfunktionalität auftreten.
Ursache
Der DEFINER -Attribut wird verwendet, um ein MySQL-Benutzerkonto anzugeben, das auf ein bestimmtes gespeichertes Objekt zugreifen kann. Es können jedoch Probleme auftreten, wenn sich das MySQL-Benutzerkonto in einem DEFINER befindet -Attribut stimmt nicht mit dem aktuell angemeldeten MySQL-Benutzer überein. Dies kann beispielsweise auftreten, wenn phpMyAdmin von cPanel verwendet wird, das sich immer als Benutzer des primären Kontos (cPanel) und nicht als benutzerdefinierter Datenbankbenutzer anmeldet.
Ebenso kann dieses Problem nach einer Site-Migration auftreten, wenn der DEFINER Attribute in der Datenbank werden nicht mit den Datenbankbenutzern der neuen Hosting-Umgebung aktualisiert.
Auflösung
Um dieses Problem zu beheben, können Sie versuchen, sich bei der Datenbank als der Datenbankbenutzer anzumelden, auf den im DEFINER verwiesen wird Attribute. (Um den richtigen Datenbankbenutzer zu ermitteln, müssen Sie möglicherweise die Datenbank sichern und den DEFINER untersuchen Attribute.) Es gibt mehrere Möglichkeiten, wie Sie sich als unterschiedliche Datenbankbenutzer anmelden können:
Methode 1:Verwenden Sie eine MySQL-Client-Anwendung
Sie können eine MySQL-Clientanwendung wie MySQL Workbench verwenden, um sich als richtiger Datenbankbenutzer bei der Datenbank anzumelden. Anschließend können Sie gespeicherte Objekte mit der richtigen Identität bearbeiten und ausführen. Informationen zur Verwendung einer MySQL-Clientanwendung zum Herstellen einer Verbindung zu Ihren Datenbanken finden Sie in diesem Artikel.
Methode 2:Verwenden Sie das 'mysql'-Befehlszeilenprogramm
Alternativ können Sie auch mysql verwenden Befehlszeilenprogramm, um sich als richtiger Datenbankbenutzer bei der Datenbank anzumelden. Anschließend können Sie gespeicherte Objekte mit der richtigen Identität bearbeiten und ausführen. Informationen zur Verwendung von mysql Befehlszeilenprogramm finden Sie in diesem Artikel.
Methode #3:Verwenden Sie eine benutzerdefinierte Installation von phpMyAdmin
Wenn Sie keine MySQL-Clientanwendung oder die Befehlszeile verwenden möchten, können Sie eine eigenständige phpMyAdmin-Installation auf Ihrem Hosting-Konto erstellen. Diese benutzerdefinierte Installation ermöglicht es Ihnen, sich bei der Datenbank als der richtige Datenbankbenutzer statt als Benutzer des primären Kontos (cPanel) anzumelden. Informationen zum Erstellen einer benutzerdefinierten phpMyAdmin-Installation finden Sie in diesem Artikel.
Manchmal können Sie sich bei einer Datenbank nicht als der Datenbankbenutzer anmelden, auf den im DEFINER verwiesen wird Attribute. Beispielsweise kann eine Website, die von einem anderen Hosting-Anbieter migriert wurde, andere MySQL-Namenskonventionen haben, und es kann unmöglich sein, einen Datenbankbenutzer mit dem richtigen Namen zu erstellen. In diesem Fall müssen Sie Folgendes tun:
- Dump die gesamte Datenbank in eine Datei. Informationen dazu finden Sie in diesem Artikel.
- Verwenden Sie Ihren bevorzugten Texteditor, um den DEFINER manuell zu aktualisieren Attribute, um auf einen von Ihnen kontrollierten Datenbankbenutzer zu verweisen.
- Importieren Sie die geänderte Datenbank in Ihr Konto. Informationen dazu finden Sie in diesem Artikel.
- Testen Sie die neue Datenbank. Sie sollten nun in der Lage sein, gespeicherte Objekte mit der richtigen Identität zu bearbeiten und auszuführen.
Weitere Informationen
Weitere Informationen zu Definierern finden Sie unter https://dev.mysql.com/doc/refman/8.0/en/stored-objects-security.html.