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;
