create user test_user@localhost; create role test_role; grant select on *.* to test_role; grant test_role to test_user@localhost; connect c1, localhost, test_user,,; show grants; Grants for test_user@localhost GRANT `test_role` TO `test_user`@`localhost` GRANT USAGE ON *.* TO `test_user`@`localhost` select user, host, default_role from mysql.user where user = 'test_user'; ERROR 42000: SELECT command denied to user 'test_user'@'localhost' for table `mysql`.`user` set default role test_role; select user, host, default_role from mysql.user where user = 'test_user'; ERROR 42000: SELECT command denied to user 'test_user'@'localhost' for table `mysql`.`user` disconnect c1; connection default; select user, host, default_role from mysql.user where user = 'test_user'; User Host default_role test_user localhost test_role connect c1, localhost, test_user,,; show grants; Grants for test_user@localhost GRANT `test_role` TO `test_user`@`localhost` GRANT USAGE ON *.* TO `test_user`@`localhost` GRANT SELECT ON *.* TO `test_role` SET DEFAULT ROLE `test_role` FOR `test_user`@`localhost` select user, host, default_role from mysql.user where user = 'test_user'; User Host default_role test_user localhost test_role set default role NONE; disconnect c1; connection default; select user, host, default_role from mysql.user where user = 'test_user'; User Host default_role test_user localhost connect c1, localhost, test_user,,; show grants; Grants for test_user@localhost GRANT `test_role` TO `test_user`@`localhost` GRANT USAGE ON *.* TO `test_user`@`localhost` select user, host, default_role from mysql.user where user = 'test_user'; ERROR 42000: SELECT command denied to user 'test_user'@'localhost' for table `mysql`.`user` disconnect c1; connection default; select user, host, default_role from mysql.user where user = 'test_user'; User Host default_role test_user localhost set default role test_role for test_user@localhost; connect c1, localhost, test_user,,; show grants; Grants for test_user@localhost GRANT `test_role` TO `test_user`@`localhost` GRANT USAGE ON *.* TO `test_user`@`localhost` GRANT SELECT ON *.* TO `test_role` SET DEFAULT ROLE `test_role` FOR `test_user`@`localhost` select user, host, default_role from mysql.user where user = 'test_user'; User Host default_role test_user localhost test_role disconnect c1; connection default; drop role test_role; drop user test_user@localhost;