create database mysqltest1; create database mysqltest2; create user foo@localhost; create role r1, r2; grant all on mysqltest1.* to r1; grant all on mysqltest2.* to r2; grant r1 to r2; grant r2 to foo@localhost; select current_user; current_user foo@localhost show tables in mysqltest1; ERROR 42000: Access denied for user 'foo'@'localhost' to database 'mysqltest1' show tables in mysqltest2; ERROR 42000: Access denied for user 'foo'@'localhost' to database 'mysqltest2' set role r2; show tables in mysqltest1; Tables_in_mysqltest1 show tables in mysqltest2; Tables_in_mysqltest2 show grants; Grants for foo@localhost GRANT r2 TO 'foo'@'localhost' GRANT USAGE ON *.* TO 'foo'@'localhost' GRANT r1 TO 'r2' GRANT USAGE ON *.* TO 'r2' GRANT ALL PRIVILEGES ON `mysqltest2`.* TO 'r2' GRANT USAGE ON *.* TO 'r1' GRANT ALL PRIVILEGES ON `mysqltest1`.* TO 'r1' drop user foo@localhost; drop role r1; drop role r2; drop database mysqltest1; drop database mysqltest2;