sql >> Databasteknik >  >> RDS >> Mysql

Har markören i Mysql andra rättigheter än användaren?

Ja, designmässigt kan en markör bete sig annorlunda än samma SELECT frågan kan fungera om den kördes av användaren som anropade proceduren.

Om du inte anger en DEFINER när du skapar ett lagrat program (proc, funktion, trigger eller händelse) eller en vy, körs objektet, när det nås, med privilegierna för användaren som ursprungligen definierade det, inte användaren som anropade det.

Du har tre alternativ här:

  • Verifiera eller eventuellt ändra behörigheterna för den nuvarande DEFINER användare om lämpligt; eller,
  • Ange en annan DEFINER användare när du definierar det lagrade programmet eller vyn... du kan göra detta så länge du (personen som skapar objektet) har SUPER privilegium och användare som anropar (åtkomst till) objektet kommer tillfälligt att ha rättigheterna till den DEFINER användare istället; eller,
  • Lägg till SQL SECURITY INVOKER till definitionen av procedurer, funktioner och vyer (men inte utlösare eller händelser), vilket gör att objektet körs med privilegierna för användaren som anropade det, istället för definieraren, vilket är standardbeteendet.

För att se de behörigheter den befintliga definieraren har, till exempel om du ser DEFINER=`someguy`@`localhost`:

mysql> SHOW GRANTS FOR 'someguy'@'localhost';

Du kan hitta den aktuella definieraren i definitionen av proceduren, med SHOW CREATE PROCEDURE procedure_name; .




  1. Gruppera efter månad och returnera 0 om data inte hittas

  2. Fråga i Oracle för att välja med underfråga

  3. Vad är det bästa sättet att paginera resultat i SQL Server

  4. varför i fjärrserver inte kan mata in kinesiska tecken i mysql kommandoraden men lokalt är ok