sql >> Database >  >> RDS >> Mysql

Cursor in Mysql heeft andere rechten dan gebruiker?

Ja, door het ontwerp kan een cursor zich anders gedragen dan dezelfde SELECT query kan zich gedragen als deze wordt uitgevoerd door de gebruiker die de procedure heeft aangeroepen.

Als u geen DEFINER opgeeft wanneer u een opgeslagen programma (proc, functie, trigger of gebeurtenis) of een weergave maakt, wordt het object, wanneer het wordt geopend, uitgevoerd met de privileges van de gebruiker die het oorspronkelijk heeft gedefinieerd, niet de gebruiker die het heeft aangeroepen.

Je hebt hier drie opties:

  • Controleer of wijzig eventueel de rechten van de huidige DEFINER gebruiker indien van toepassing; of,
  • Specificeer een andere DEFINER gebruiker bij het definiëren van het opgeslagen programma of de weergave... u kunt dit doen zolang u (de persoon die het object maakt) de SUPER heeft privilege, en gebruikers die het object aanroepen (toegang krijgen tot) hebben tijdelijk de rechten van die DEFINER gebruiker in plaats daarvan; of,
  • Voeg SQL SECURITY INVOKER aan de definitie van procedures, functies en weergaven (hoewel niet triggers of gebeurtenissen), waardoor het object wordt uitgevoerd met de privileges van de gebruiker die het heeft aangeroepen, in plaats van de definiëring, wat het standaardgedrag is.

Om de machtigingen te zien die de bestaande definitie heeft, bijvoorbeeld als u DEFINER=`someguy`@`localhost` ziet:

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

U kunt de huidige definitie vinden in de definitie van de procedure, met SHOW CREATE PROCEDURE procedure_name; .




  1. Debug PDO mySql voeg NULL in de database in in plaats van leeg

  2. krijg mime-type afbeelding

  3. Hoe AppArmor te configureren voor MySQL-gebaseerde systemen (MySQL/MariaDB Replication + Galera)

  4. Sql-query voor boomtabel