include/master-slave.inc [connection master] 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; include/rpl_end.inc