sql >> Databasteknik >  >> RDS >> Mysql

Hur man felsöker MySQL-definieringsproblem

Den här artikeln diskuterar hur du felsöker problem som kan uppstå när DEFINER attribut används med MySQL-lagrade objekt (vyer, triggers, funktioner och lagrade procedurer).

Problem

Du kan uppleva problem med att visa eller köra MySQL-lagrade objekt (vyer, utlösare, funktioner och lagrade procedurer). Till exempel kan du få följande felmeddelande i 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.

Alternativt kan du uppleva till synes slumpmässiga fel under drift av webbplatsen eller förlust av databasfunktionalitet.

Orsak

DEFINER attribut används för att ange ett MySQL-användarkonto som kan komma åt ett visst lagrat objekt. Däremot kan problem uppstå när MySQL-användarkontot är i en DEFINER attributet matchar inte den för närvarande inloggade MySQL-användaren. Detta kan till exempel inträffa när du använder cPanels phpMyAdmin, som alltid loggar in som den primära kontoanvändaren (cPanel) och inte som en användardefinierad databasanvändare.

På samma sätt kan det här problemet uppstå efter en webbplatsmigrering om DEFINER attribut i databasen uppdateras inte med den nya värdmiljöns databasanvändare.

Upplösning

För att lösa det här problemet kan du försöka logga in på databasen som databasanvändare som refereras till i DEFINER attribut. (För att fastställa rätt databasanvändare kan du behöva dumpa databasen och undersöka DEFINER attribut.) Det finns flera sätt du kan logga in som olika databasanvändare:

Metod #1:Använd en MySQL-klientapplikation

Du kan använda en MySQL-klientapplikation, såsom MySQL Workbench, för att logga in i databasen som rätt databasanvändare. Du kommer då att kunna redigera och köra lagrade objekt med rätt identitet. För information om hur du använder en MySQL-klientapplikation för att ansluta till dina databaser, se den här artikeln.

Metod #2:Använd kommandoradsprogrammet 'mysql'

Alternativt kan du använda mysql kommandoradsprogram för att logga in i databasen som rätt databasanvändare. Du kommer då att kunna redigera och köra lagrade objekt med rätt identitet. För information om hur du använder mysql kommandoradsprogram, se den här artikeln.

Metod #3:Använd en anpassad installation av phpMyAdmin

Om du inte vill använda en MySQL-klientapplikation eller kommandoraden kan du skapa en fristående phpMyAdmin-installation på ditt värdkonto. Denna anpassade installation gör att du kan logga in på databasen som rätt databasanvändare istället för som primärkontoanvändare (cPanel). För information om hur du skapar en anpassad phpMyAdmin-installation, se den här artikeln.

Ibland kan du inte logga in på en databas som den databasanvändare som refereras till i DEFINER attribut. Till exempel kan en webbplats som har migrerats från en annan värdleverantör ha olika MySQL-namnkonventioner, och det kan vara omöjligt att skapa en databasanvändare med rätt namn. I det här fallet måste du göra följande:

  1. Dumpa hela databasen till en fil. Mer information om hur du gör detta finns i den här artikeln.
  2. Använd din föredragna textredigerare för att manuellt uppdatera DEFINER attribut för att referera till en databasanvändare som du kontrollerar.
  3. Importera den ändrade databasen till ditt konto. Mer information om hur du gör detta finns i den här artikeln.
  4. Testa den nya databasen. Du bör nu kunna redigera och köra lagrade objekt med rätt identitet.

Mer information

För mer information om definierare, besök https://dev.mysql.com/doc/refman/8.0/en/stored-objects-security.html.


  1. Behöver jag skapa index på främmande nycklar på Oracle?

  2. PostgreSQL Column existerar inte men det gör den faktiskt

  3. Oracle pl-sql escape-tecken (för en ' )

  4. Ett nytt sätt att anpassa din PostgreSQL-övervakning med Prometheus