Ja, designmæssigt kan en markør opføre sig anderledes end den samme SELECT
forespørgslen kunne opføre sig, hvis den blev udført af den bruger, der kaldte proceduren.
Hvis du ikke angiver en DEFINER
når du opretter et lagret program (proc, funktion, trigger eller hændelse) eller en visning, så kører objektet, når det åbnes, med rettighederne for den bruger, der oprindeligt definerede det, ikke den bruger, der påkaldte det.
Du har tre muligheder her:
- Bekræft eller modificer tilladelserne for den aktuelle
DEFINER
bruger, hvis det er relevant; eller, - Angiv en anden
DEFINER
bruger, når du definerer det lagrede program eller visning... du kan gøre dette, så længe du (den person, der opretter objektet) harSUPER
privilegium, og brugere, der påberåber sig (adgang til) objektet, vil midlertidigt have rettighederne til denDEFINER
bruger i stedet for; eller, - Tilføj
SQL SECURITY INVOKER
til definitionen af procedurer, funktioner og visninger (dog ikke udløsere eller hændelser), hvilket får objektet til at køre med rettighederne for den bruger, der påkaldte det, i stedet for definereren, som er standardadfærden.
For at se de tilladelser, den eksisterende definerer har, for eksempel hvis du ser DEFINER=`someguy`@`localhost`:
mysql> SHOW GRANTS FOR 'someguy'@'localhost';
Du kan finde den aktuelle definerer i definitionen af proceduren med SHOW CREATE PROCEDURE procedure_name;
.