stop slave; drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9; reset master; reset slave; drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9; start slave; DROP PROCEDURE IF EXISTS test.p1; DROP PROCEDURE IF EXISTS test.p2; DROP PROCEDURE IF EXISTS test.p3; grant usage on *.* to user1@localhost; flush privileges; SELECT CURRENT_USER(); CURRENT_USER() root@localhost SELECT USER(); USER() root@localhost CREATE PROCEDURE test.p1 () SQL SECURITY INVOKER SELECT CURRENT_USER(), USER(); CREATE PROCEDURE test.p2 () SQL SECURITY DEFINER CALL test.p1(); CREATE PROCEDURE test.p3 () SQL SECURITY INVOKER CALL test.p1(); GRANT EXECUTE ON PROCEDURE p1 TO user1@localhost; GRANT EXECUTE ON PROCEDURE p2 TO user1@localhost; GRANT EXECUTE ON PROCEDURE p3 TO user1@localhost; <******** Master user1 p3 & p2 calls *******> ---------------------------------------------- SELECT CURRENT_USER(); CURRENT_USER() user1@localhost SELECT USER(); USER() user1@localhost CALL test.p3(); CURRENT_USER() USER() user1@localhost user1@localhost CALL test.p2(); CURRENT_USER() USER() root@localhost user1@localhost <******** Slave user1 p3 & p2 calls *******> --------------------------------------------- SELECT CURRENT_USER(); CURRENT_USER() user1@localhost SELECT USER(); USER() user1@localhost CALL test.p3(); CURRENT_USER() USER() user1@localhost user1@localhost CALL test.p2(); CURRENT_USER() USER() root@localhost user1@localhost DROP PROCEDURE IF EXISTS test.p1; DROP PROCEDURE IF EXISTS test.p3; DROP PROCEDURE IF EXISTS test.p2; DROP TABLE IF EXISTS test.t1; DROP TABLE IF EXISTS test.t2; DROP USER user1@localhost;