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

Cursor i Mysql har andre rettigheder end bruger?

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) har SUPER privilegium, og brugere, der påberåber sig (adgang til) objektet, vil midlertidigt have rettighederne til den DEFINER 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; .




  1. MySQL:To n:1 relationer, men ikke begge på én gang

  2. Docker-compose miljøvariabler

  3. multiparameter fejl med datetime_select

  4. Indeksering af k-d træ?