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:
- Dump hele databasen til en fil. For information om, hvordan du gør dette, se venligst denne artikel.
- Brug din foretrukne teksteditor til manuelt at opdatere DEFINER attributter for at referere til en databasebruger, som du kontrollerer.
- Importer den ændrede database til din konto. For information om, hvordan du gør dette, se venligst denne artikel.
- 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.