Mysql
 sql >> Base de données >  >> RDS >> Mysql

Le curseur dans Mysql a-t-il d'autres droits que l'utilisateur ?

Oui, de par sa conception, un curseur peut se comporter différemment du même SELECT la requête pourrait se comporter si elle était exécutée par l'utilisateur qui a appelé la procédure.

Si vous ne spécifiez pas de DEFINER lorsque vous créez un programme stocké (proc, fonction, déclencheur ou événement) ou une vue, l'objet, lorsqu'il est accédé, s'exécute avec les privilèges de l'utilisateur qui l'a défini à l'origine, et non de l'utilisateur qui l'a appelé.

Vous avez trois options, ici :

  • Vérifier ou éventuellement modifier les permissions du DEFINER actuel utilisateur le cas échéant ; ou,
  • Spécifiez un autre DEFINER utilisateur lors de la définition du programme ou de la vue stockée... vous pouvez le faire tant que vous (la personne créant l'objet) avez le SUPER privilège, et les utilisateurs invoquant (accédant) à l'objet auront temporairement les droits de ce DEFINER utilisateur à la place ; ou,
  • Ajouter SQL SECURITY INVOKER à la définition des procédures, des fonctions et des vues (mais pas des déclencheurs ou des événements), provoquant l'exécution de l'objet avec les privilèges de l'utilisateur qui l'a appelé, au lieu du définisseur, qui est le comportement par défaut.

Pour voir les autorisations dont dispose le définisseur existant, par exemple si vous voyez DEFINER=`someguy`@`localhost` :

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

Vous pouvez trouver le définisseur courant dans la définition de la procédure, avec SHOW CREATE PROCEDURE procedure_name; .