sql >> Database teknologi >  >> RDS >> Mysql

Sådan fejlfindes problemer med MySQL-defineret

Denne artikel diskuterer, hvordan du fejlfinder problemer, der kan opstå, når DEFINER attribut bruges med MySQL-lagrede objekter (visninger, triggere, funktioner og lagrede procedurer).

Problem

Du kan opleve problemer med at se eller køre MySQL-lagrede objekter (visninger, triggere, funktioner og lagrede procedurer). For eksempel kan du modtage følgende fejlmeddelelse 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 opleve tilsyneladende tilfældige fejl under driften af ​​webstedet eller tab af databasefunktionalitet.

Årsag

DEFINER attribut bruges til at angive en MySQL-brugerkonto, der kan få adgang til et bestemt lagret objekt. Der kan dog opstå problemer, når MySQL-brugerkontoen er i en DEFINER attribut matcher ikke den aktuelt loggede MySQL-bruger. Dette kan f.eks. ske ved brug af cPanels phpMyAdmin, som altid logger ind som den primære konto (cPanel) bruger, og ikke som en brugerdefineret databasebruger.

På samme måde kan dette problem opstå efter en webstedsmigrering, hvis DEFINER attributter i databasen opdateres ikke med det nye hostingmiljøs databasebrugere.

Opløsning

For at løse dette problem kan du prøve at logge på databasen som databasebrugeren, der refereres til i DEFINER egenskaber. (For at bestemme den korrekte databasebruger skal du muligvis dumpe databasen og undersøge DEFINER attributter.) Der er flere måder, du kan logge på som forskellige databasebrugere:

Metode #1:Brug et MySQL-klientprogram

Du kan bruge en MySQL-klientapplikation, såsom MySQL Workbench, til at logge på databasen som den korrekte databasebruger. Du vil derefter være i stand til at redigere og køre gemte objekter med den rigtige identitet. For information om, hvordan du bruger en MySQL-klientapplikation til at oprette forbindelse til dine databaser, se venligst denne artikel.

Metode #2:Brug kommandolinjeprogrammet 'mysql'

Alternativt kan du bruge mysql kommandolinjeprogram til at logge på databasen som den korrekte databasebruger. Du vil derefter være i stand til at redigere og køre gemte objekter med den rigtige identitet. For information om, hvordan du bruger mysql commnand-line program, se venligst denne artikel.

Metode #3:Brug en brugerdefineret installation af phpMyAdmin

Hvis du ikke ønsker at bruge et MySQL-klientprogram eller kommandolinjen, kan du oprette en selvstændig phpMyAdmin-installation på din hostingkonto. Denne brugerdefinerede installation giver dig mulighed for at logge på databasen som den korrekte databasebruger i stedet for som den primære kontobruger (cPanel). For information om, hvordan du opretter en brugerdefineret phpMyAdmin-installation, se venligst denne artikel.

Nogle gange kan du ikke logge ind på en database som databasebrugeren, der henvises til i DEFINER egenskaber. For eksempel kan et websted, der er blevet migreret fra en anden hostingudbyder, have forskellige MySQL-navnekonventioner, og det kan være umuligt at oprette en databasebruger med det korrekte navn. I dette tilfælde skal du gøre følgende:

  1. Dump hele databasen til en fil. For information om, hvordan du gør dette, se venligst denne artikel.
  2. Brug din foretrukne teksteditor til manuelt at opdatere DEFINER attributter for at referere til en databasebruger, som du kontrollerer.
  3. Importer den ændrede database til din konto. For information om, hvordan du gør dette, se venligst denne artikel.
  4. Test den nye database. Du skulle nu være i stand til at redigere og køre lagrede objekter med den rigtige identitet.

Flere oplysninger

For mere information om definerere, besøg venligst https://dev.mysql.com/doc/refman/8.0/en/stored-objects-security.html.


  1. beregne løbende balance i oracle-forespørgsel

  2. RMAN fejler med RMAN-06900 RMAN-06901 ORA-04031

  3. ORA-22905 - når du forespørger en tabeltype med en select-sætning

  4. ingen pg_hba.conf-indgang for vært