若定義了如下存儲過程:
/* Procedure structure for procedure `test_add_task` */ /*!50003 DROP PROCEDURE IF EXISTS `test_add_task` */; DELIMITER $$ /*!50003 CREATE DEFINER=`root`@`%` PROCEDURE `test_add_task`( in_id int) #按調用者權限執行存儲過程 SQL SECURITY INVOKER BEGIN insert into test_task (id) values (in_id); END */$$ DELIMITER ;
若不存在SQL SECURITY INVOKER語句,則mysql默認按存儲過程的定義者來執行存儲過程,也就是語句DEFINER=`root`@`%`指示的`root`@`%`用戶。
SQL SECURITY INVOKER語句的含義為:用調用此存儲過程的用戶執行此存儲過程。
ps.另有語句SQL SECURITY DEFINER,含義為按定義者執行。。。 額。 若連接數據庫是A用戶,B用戶為定義者,並存在更高的權限。。。那么。。。可能存在一定的安全隱患。 建議用:SQL SECURITY INVOKER