Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Cursor in MySQL hat andere Rechte als Benutzer?

Ja, ein Cursor kann sich absichtlich anders verhalten als derselbe SELECT Die Abfrage könnte sich verhalten, wenn sie von dem Benutzer ausgeführt würde, der die Prozedur aufgerufen hat.

Wenn Sie keinen DEFINER angeben Wenn Sie ein gespeichertes Programm (Prozedur, Funktion, Trigger oder Ereignis) oder eine Ansicht erstellen, wird das Objekt beim Zugriff mit den Rechten des Benutzers ausgeführt, der es ursprünglich definiert hat, und nicht des Benutzers, der es aufgerufen hat.

Sie haben hier drei Möglichkeiten:

  • Überprüfen oder ändern Sie möglicherweise die Berechtigungen des aktuellen DEFINER Benutzer, falls zutreffend; oder,
  • Geben Sie einen anderen DEFINER an Benutzer beim Definieren des gespeicherten Programms oder der Ansicht... Sie können dies tun, solange Sie (die Person, die das Objekt erstellt) den SUPER haben Privileg, und Benutzer, die das Objekt aufrufen (auf es zugreifen), haben vorübergehend die Rechte dieses DEFINER Benutzer stattdessen; oder,
  • Fügen Sie SQL SECURITY INVOKER hinzu zur Definition von Prozeduren, Funktionen und Ansichten (aber nicht von Triggern oder Ereignissen), wodurch das Objekt mit den Rechten des Benutzers ausgeführt wird, der es aufgerufen hat, anstatt mit dem Definierer, was das Standardverhalten ist.

Um die Berechtigungen zu sehen, die der vorhandene Definierer hat, zum Beispiel, wenn Sie DEFINER=`someguy`@`localhost`:

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

Den aktuellen Definierer finden Sie in der Definition der Prozedur mit SHOW CREATE PROCEDURE procedure_name; .