sql >> Databáze >  >> RDS >> Mysql

Jak řešit problémy s definicí MySQL

Tento článek popisuje, jak řešit problémy, které mohou nastat, když DEFINER atribut se používá s uloženými objekty MySQL (pohledy, spouštěče, funkce a uložené procedury).

Problém

Můžete zaznamenat problémy se zobrazením nebo spuštěním uložených objektů MySQL (pohledy, spouštěče, funkce a uložené procedury). V phpMyAdmin se například může zobrazit následující chybová zpráva:

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.

Případně můžete zaznamenat zdánlivě náhodné chyby během provozu webu nebo ztrátu funkčnosti databáze.

Příčina

DEFINER atribut se používá k určení uživatelského účtu MySQL, který má přístup ke konkrétnímu uloženému objektu. Problémy však mohou nastat, když je uživatelský účet MySQL v DEFINER atribut neodpovídá aktuálně přihlášenému uživateli MySQL. K tomu může dojít například při použití phpMyAdmin cPanelu, který se vždy přihlašuje jako uživatel primárního účtu (cPanel), a nikoli jako uživatelsky definovaný uživatel databáze.

Podobně může k tomuto problému dojít po migraci webu, pokud je DEFINER atributy v databázi nejsou aktualizovány s uživateli databáze nového hostitelského prostředí.

Rozlišení

Chcete-li tento problém vyřešit, můžete se pokusit přihlásit do databáze jako uživatel databáze, na kterého odkazuje DEFINER atributy. (Chcete-li určit správného uživatele databáze, možná budete muset vypsat databázi a prozkoumat DEFINER atributů.) Existuje několik způsobů, jak se můžete přihlásit jako různí uživatelé databáze:

Metoda č. 1:Použití klientské aplikace MySQL

K přihlášení do databáze jako správný uživatel databáze můžete použít klientskou aplikaci MySQL, jako je MySQL Workbench. Poté budete moci upravovat a spouštět uložené objekty pomocí správné identity. Informace o tom, jak používat klientskou aplikaci MySQL pro připojení k vašim databázím, naleznete v tomto článku.

Metoda č. 2:Použijte program příkazového řádku 'mysql'

Případně můžete použít mysql program příkazového řádku pro přihlášení do databáze jako správný uživatel databáze. Poté budete moci upravovat a spouštět uložené objekty pomocí správné identity. Informace o tom, jak používat mysql program příkazového řádku, viz tento článek.

Metoda č. 3:Použijte vlastní instalaci phpMyAdmin

Pokud nechcete používat klientskou aplikaci MySQL nebo příkazový řádek, můžete si na svůj hostingový účet vytvořit samostatnou instalaci phpMyAdmin. Tato vlastní instalace vám umožňuje přihlásit se do databáze jako správný uživatel databáze místo jako uživatel primárního účtu (cPanel). Informace o tom, jak vytvořit vlastní instalaci phpMyAdmin, naleznete v tomto článku.

Někdy se nemůžete přihlásit do databáze jako uživatel databáze uvedený v DEFINERU atributy. Například web, který byl migrován od jiného poskytovatele hostingu, může mít odlišné konvence pojmenování MySQL a může být nemožné vytvořit uživatele databáze se správným jménem. V tomto případě musíte provést následující:

  1. Vypište celou databázi do souboru. Informace o tom, jak to provést, naleznete v tomto článku.
  2. Pomocí preferovaného textového editoru ručně aktualizujte DEFINER atributy odkazující na uživatele databáze, kterého řídíte.
  3. Importujte upravenou databázi do svého účtu. Informace o tom, jak to provést, naleznete v tomto článku.
  4. Otestujte novou databázi. Nyní byste měli být schopni upravovat a spouštět uložené objekty pomocí správné identity.

Další informace

Další informace o definicích naleznete na https://dev.mysql.com/doc/refman/8.0/en/stored-objects-security.html.


  1. Rychlé tipy pro opravu a obnovu databáze SQL bez zálohování

  2. Několik způsobů, jak odstranit duplikáty z tabulek SQL

  3. Optimalizace úložiště MySQL:Konfigurace optimalizace InnoDB pro vysoký výkon

  4. Jak používat role, které se změnily v MySQL 8.0