W tym artykule omówiono sposoby rozwiązywania problemów, które mogą wystąpić, gdy DEFINER atrybut jest używany z obiektami składowanymi MySQL (widokami, wyzwalaczami, funkcjami i procedurami składowanymi).
Problem
Mogą wystąpić problemy z przeglądaniem lub uruchamianiem obiektów składowanych MySQL (widoków, wyzwalaczy, funkcji i procedur składowanych). Na przykład możesz otrzymać następujący komunikat o błędzie w 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.
Alternatywnie możesz doświadczyć pozornie losowych błędów podczas działania strony internetowej lub utraty funkcjonalności bazy danych.
Przyczyna
DEFINIERA Atrybut jest używany do określenia konta użytkownika MySQL, które może uzyskać dostęp do określonego przechowywanego obiektu. Jednak problemy mogą wystąpić, gdy konto użytkownika MySQL w DEFINERZE atrybut nie pasuje do aktualnie zalogowanego użytkownika MySQL. Na przykład może się to zdarzyć podczas korzystania z phpMyAdmin cPanel, który zawsze loguje się jako użytkownik konta głównego (cPanel), a nie jako użytkownik bazy danych zdefiniowany przez użytkownika.
Podobnie ten problem może wystąpić po migracji witryny, jeśli DEFINIER atrybuty w bazie danych nie są aktualizowane przez użytkowników bazy danych nowego środowiska hostingowego.
Rozdzielczość
Aby rozwiązać ten problem, możesz spróbować zalogować się do bazy danych jako użytkownik bazy danych, do którego odwołuje się DEFINER atrybuty. (Aby określić właściwego użytkownika bazy danych, może być konieczne zrzucenie bazy danych i sprawdzenie DEFINIERA atrybuty.) Istnieje kilka sposobów na zalogowanie się jako różni użytkownicy bazy danych:
Metoda nr 1:Użyj aplikacji klienckiej MySQL
Możesz użyć aplikacji klienckiej MySQL, takiej jak MySQL Workbench, aby zalogować się do bazy danych jako poprawny użytkownik bazy danych. Będziesz wtedy mógł edytować i uruchamiać przechowywane obiekty przy użyciu właściwej tożsamości. Aby uzyskać informacje o tym, jak używać aplikacji klienckiej MySQL do łączenia się z bazami danych, zapoznaj się z tym artykułem.
Metoda nr 2:Użyj programu wiersza poleceń „mysql”
Alternatywnie możesz użyć mysql program wiersza poleceń, aby zalogować się do bazy danych jako poprawny użytkownik bazy danych. Będziesz wtedy mógł edytować i uruchamiać przechowywane obiekty przy użyciu właściwej tożsamości. Aby uzyskać informacje o tym, jak używać mysql program wiersza poleceń, zapoznaj się z tym artykułem.
Metoda #3:Użyj niestandardowej instalacji phpMyAdmin
Jeśli nie chcesz używać aplikacji klienckiej MySQL ani wiersza poleceń, możesz utworzyć samodzielną instalację phpMyAdmin na swoim koncie hostingowym. Ta niestandardowa instalacja umożliwia logowanie się do bazy danych jako właściwy użytkownik bazy danych zamiast jako użytkownik konta podstawowego (cPanel). Aby uzyskać informacje o tym, jak utworzyć niestandardową instalację phpMyAdmin, zapoznaj się z tym artykułem.
Czasami nie możesz zalogować się do bazy danych jako użytkownik bazy danych, o którym mowa w DEFINIERA atrybuty. Na przykład witryna, która została przeniesiona od innego dostawcy hostingu, może mieć różne konwencje nazewnictwa MySQL i może być niemożliwe utworzenie użytkownika bazy danych o poprawnej nazwie. W takim przypadku musisz wykonać następujące czynności:
- Zrzuć całą bazę danych do pliku. Aby uzyskać informacje, jak to zrobić, zapoznaj się z tym artykułem.
- Użyj preferowanego edytora tekstu, aby ręcznie zaktualizować DEFINER atrybuty odwołujące się do użytkownika bazy danych, którego kontrolujesz.
- Zaimportuj zmodyfikowaną bazę danych na swoje konto. Aby uzyskać informacje, jak to zrobić, zapoznaj się z tym artykułem.
- Przetestuj nową bazę danych. Powinieneś teraz móc edytować i uruchamiać przechowywane obiekty przy użyciu właściwej tożsamości.
Więcej informacji
Aby uzyskać więcej informacji na temat definiujących, odwiedź stronę https://dev.mysql.com/doc/refman/8.0/en/stored-objects-security.html.