summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mysql-test/r/acl_roles_create_and_grant_role.result12
-rw-r--r--mysql-test/r/acl_roles_rebuild_role_grants.result18
-rw-r--r--mysql-test/r/acl_roles_rename_user.result17
-rw-r--r--mysql-test/r/acl_roles_set_role-database-recursive.result31
-rw-r--r--mysql-test/r/acl_roles_set_role-database-simple.result15
-rw-r--r--mysql-test/r/acl_roles_set_role-multiple-role.result92
-rw-r--r--mysql-test/r/acl_roles_set_role-recursive.result40
-rw-r--r--mysql-test/r/acl_roles_set_role-routine-simple.result14
-rw-r--r--mysql-test/r/acl_roles_set_role-simple.result22
-rw-r--r--mysql-test/r/acl_roles_set_role-table-column-priv.result12
-rw-r--r--mysql-test/r/acl_roles_set_role-table-simple.result18
-rw-r--r--mysql-test/r/acl_roles_show_grants.result17
-rw-r--r--mysql-test/suite/funcs_1/r/is_columns_mysql.result14
-rw-r--r--mysql-test/suite/funcs_1/r/is_tables_mysql.result4
-rw-r--r--mysql-test/t/acl_roles_rename_user.test5
-rw-r--r--mysql-test/t/acl_roles_set_role-database-recursive.test7
-rw-r--r--mysql-test/t/acl_roles_set_role-database-simple.test7
-rw-r--r--mysql-test/t/acl_roles_set_role-multiple-role.test63
-rw-r--r--mysql-test/t/acl_roles_set_role-recursive.test18
-rw-r--r--mysql-test/t/acl_roles_set_role-routine-simple.test7
-rw-r--r--mysql-test/t/acl_roles_set_role-simple.test11
-rw-r--r--mysql-test/t/acl_roles_set_role-table-column-priv.test6
-rw-r--r--mysql-test/t/acl_roles_set_role-table-simple.test6
-rw-r--r--mysql-test/t/acl_roles_show_grants.test9
-rw-r--r--scripts/mysql_system_tables.sql2
-rw-r--r--sql/sql_acl.cc1
26 files changed, 208 insertions, 260 deletions
diff --git a/mysql-test/r/acl_roles_create_and_grant_role.result b/mysql-test/r/acl_roles_create_and_grant_role.result
index 26ffbe93ef3..5cf670fdbee 100644
--- a/mysql-test/r/acl_roles_create_and_grant_role.result
+++ b/mysql-test/r/acl_roles_create_and_grant_role.result
@@ -4,13 +4,13 @@ create user u1;
set role r1;
grant r1 to u1;
select * from mysql.roles_mapping;
-Host User Role
-% u1 r1
-localhost root r1
+Host User Role Admin_option
+localhost root r1 N
+% u1 r1 N
drop user u1;
select * from mysql.roles_mapping;
-Host User Role
-localhost root r1
+Host User Role Admin_option
+localhost root r1 N
show grants;
Grants for root@localhost
GRANT r1 TO 'root'@'localhost'
@@ -19,7 +19,7 @@ GRANT PROXY ON ''@'%' TO 'root'@'localhost' WITH GRANT OPTION
GRANT USAGE ON *.* TO 'r1'
drop role r1;
select * from mysql.roles_mapping;
-Host User Role
+Host User Role Admin_option
show grants;
Grants for root@localhost
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION
diff --git a/mysql-test/r/acl_roles_rebuild_role_grants.result b/mysql-test/r/acl_roles_rebuild_role_grants.result
index ae62eca2d92..023abda8cde 100644
--- a/mysql-test/r/acl_roles_rebuild_role_grants.result
+++ b/mysql-test/r/acl_roles_rebuild_role_grants.result
@@ -14,8 +14,8 @@ show grants for u2;
Grants for u2@%
GRANT USAGE ON *.* TO 'u2'@'%'
select * from mysql.roles_mapping;
-Host User Role
-% u1 r1
+Host User Role Admin_option
+% u1 r1 N
revoke r1 from u1;
revoke r1 from u1;
ERROR HY000: Cannot revoke role 'r1' from: 'u1'@'%'.
@@ -23,7 +23,7 @@ show grants for u1;
Grants for u1@%
GRANT USAGE ON *.* TO 'u1'@'%'
select * from mysql.roles_mapping;
-Host User Role
+Host User Role Admin_option
grant r1 to u1;
grant r1 to u1;
ERROR HY000: Cannot grant role 'r1' to: 'u1'.
@@ -32,23 +32,23 @@ Grants for u1@%
GRANT r1 TO 'u1'@'%'
GRANT USAGE ON *.* TO 'u1'@'%'
select * from mysql.roles_mapping;
-Host User Role
-% u1 r1
+Host User Role Admin_option
+% u1 r1 N
drop role r1;
show grants for u1;
Grants for u1@%
GRANT USAGE ON *.* TO 'u1'@'%'
select * from mysql.roles_mapping;
-Host User Role
+Host User Role Admin_option
create role r1;
grant r1 to u1;
select * from mysql.roles_mapping;
-Host User Role
-% u1 r1
+Host User Role Admin_option
+% u1 r1 N
drop user u1;
show grants for u1;
ERROR 42000: There is no such grant defined for user 'u1' on host '%'
select * from mysql.roles_mapping;
-Host User Role
+Host User Role Admin_option
drop role r1;
drop user u2;
diff --git a/mysql-test/r/acl_roles_rename_user.result b/mysql-test/r/acl_roles_rename_user.result
index 2a5199667e6..5817a7f94a8 100644
--- a/mysql-test/r/acl_roles_rename_user.result
+++ b/mysql-test/r/acl_roles_rename_user.result
@@ -1,14 +1,13 @@
create user test_user@localhost;
create role test_role1;
-insert into mysql.roles_mapping values ('localhost', 'test_user', 'test_role1');
+grant test_role1 to test_user@localhost;
create role test_role2;
-insert into mysql.roles_mapping values ('', 'test_role1', 'test_role2');
-flush privileges;
+grant test_role2 to test_role1;
use mysql;
select * from roles_mapping;
-Host User Role
- test_role1 test_role2
-localhost test_user test_role1
+Host User Role Admin_option
+ test_role1 test_role2 N
+localhost test_user test_role1 N
rename user 'test_user'@'localhost' to 'test_user_rm'@'newhost';
select user, host from user where user like 'test%';
user host
@@ -16,9 +15,9 @@ test_role1
test_role2
test_user_rm newhost
select * from roles_mapping;
-Host User Role
- test_role1 test_role2
-newhost test_user_rm test_role1
+Host User Role Admin_option
+ test_role1 test_role2 N
+newhost test_user_rm test_role1 N
delete from mysql.roles_mapping;
delete from mysql.user where user like 'test%';
flush privileges;
diff --git a/mysql-test/r/acl_roles_set_role-database-recursive.result b/mysql-test/r/acl_roles_set_role-database-recursive.result
index 9f3ab12a752..e61d9ed4bff 100644
--- a/mysql-test/r/acl_roles_set_role-database-recursive.result
+++ b/mysql-test/r/acl_roles_set_role-database-recursive.result
@@ -1,20 +1,19 @@
create user 'test_user'@'localhost';
create role test_role1;
create role test_role2;
-insert into mysql.roles_mapping values ('localhost', 'test_user', 'test_role1');
-insert into mysql.roles_mapping values ('localhost', 'test_user', 'test_role2');
-insert into mysql.roles_mapping values ('', 'test_role1', 'test_role2');
+grant test_role1 to test_user@localhost;
+grant test_role2 to test_user@localhost;
+grant test_role2 to test_role1;
select user, host from mysql.user where user not like 'root';
user host
test_role1
test_role2
test_user localhost
select * from mysql.roles_mapping;
-Host User Role
- test_role1 test_role2
-localhost test_user test_role1
-localhost test_user test_role2
-flush privileges;
+Host User Role Admin_option
+ test_role1 test_role2 N
+localhost test_user test_role1 N
+localhost test_user test_role2 N
select user, host from mysql.db;
user host
%
@@ -31,10 +30,10 @@ select current_user(), current_role();
current_user() current_role()
test_user@localhost test_role1
select * from mysql.roles_mapping;
-Host User Role
- test_role1 test_role2
-localhost test_user test_role1
-localhost test_user test_role2
+Host User Role Admin_option
+ test_role1 test_role2 N
+localhost test_user test_role1 N
+localhost test_user test_role2 N
set role none;
select current_user(), current_role();
current_user() current_role()
@@ -46,10 +45,10 @@ select current_user(), current_role();
current_user() current_role()
test_user@localhost test_role2
select * from mysql.roles_mapping;
-Host User Role
- test_role1 test_role2
-localhost test_user test_role1
-localhost test_user test_role2
+Host User Role Admin_option
+ test_role1 test_role2 N
+localhost test_user test_role1 N
+localhost test_user test_role2 N
drop user 'test_user'@'localhost';
revoke select on mysql.* from test_role2;
delete from mysql.user where user='test_role1';
diff --git a/mysql-test/r/acl_roles_set_role-database-simple.result b/mysql-test/r/acl_roles_set_role-database-simple.result
index d71e7a0c099..7e81e3eec9b 100644
--- a/mysql-test/r/acl_roles_set_role-database-simple.result
+++ b/mysql-test/r/acl_roles_set_role-database-simple.result
@@ -1,14 +1,13 @@
create user 'test_user'@'localhost';
create role test_role1;
-insert into mysql.roles_mapping values ('localhost', 'test_user', 'test_role1');
+grant test_role1 to test_user@localhost;
select user, host from mysql.user where user not like 'root';
user host
test_role1
test_user localhost
select * from mysql.roles_mapping;
-Host User Role
-localhost test_user test_role1
-flush privileges;
+Host User Role Admin_option
+localhost test_user test_role1 N
grant select on mysql.* to test_role1;
grant insert, delete on mysql.roles_mapping to test_role1;
grant reload on *.* to test_role1;
@@ -22,11 +21,11 @@ select current_user(), current_role();
current_user() current_role()
test_user@localhost test_role1
select * from mysql.roles_mapping;
-Host User Role
-localhost test_user test_role1
+Host User Role Admin_option
+localhost test_user test_role1 N
insert into mysql.user (user, host) values ('Dummy', 'Dummy');
ERROR 42000: INSERT command denied to user 'test_user'@'localhost' for table 'user'
-insert into mysql.roles_mapping values ('localhost', 'test_user', 'test_role2');
+insert into mysql.roles_mapping values ('localhost', 'test_user', 'test_role2', 'N');
delete from mysql.roles_mapping where Role='test_role2';
use mysql;
set role none;
@@ -39,7 +38,7 @@ select * from mysql.roles_mapping;
ERROR 42000: SELECT command denied to user 'test_user'@'localhost' for table 'roles_mapping'
insert into mysql.user (user, host) values ('Dummy', 'Dummy');
ERROR 42000: INSERT command denied to user 'test_user'@'localhost' for table 'user'
-insert into mysql.roles_mapping values ('localhost', 'test_user', 'test_role2');
+insert into mysql.roles_mapping values ('localhost', 'test_user', 'test_role2', 'N');
ERROR 42000: INSERT command denied to user 'test_user'@'localhost' for table 'roles_mapping'
delete from mysql.roles_mapping where Role='test_role2';
ERROR 42000: DELETE command denied to user 'test_user'@'localhost' for table 'roles_mapping'
diff --git a/mysql-test/r/acl_roles_set_role-multiple-role.result b/mysql-test/r/acl_roles_set_role-multiple-role.result
index 5af079ea611..f29ad5b97e0 100644
--- a/mysql-test/r/acl_roles_set_role-multiple-role.result
+++ b/mysql-test/r/acl_roles_set_role-multiple-role.result
@@ -1,47 +1,25 @@
create user 'test_user'@'localhost';
-create user 'r_sel'@'';
-create user 'r_ins'@'';
-create user 'r_upd'@'';
-create user 'r_del'@'';
-create user 'r_crt'@'';
-create user 'r_drp'@'';
-create user 'r_rld'@'';
-update mysql.user set Select_priv='Y' where user like 'r_sel';
-update mysql.user set Insert_priv='Y' where user like 'r_ins';
-update mysql.user set Update_priv='Y' where user like 'r_upd';
-update mysql.user set Delete_priv='Y' where user like 'r_del';
-update mysql.user set Create_priv='Y' where user like 'r_crt';
-update mysql.user set Drop_priv ='Y' where user like 'r_drp';
-update mysql.user set Reload_priv='Y' where user like 'r_rld';
-update mysql.user set is_role='Y' where user like 'r\_%';
-select * from mysql.user where user='r_sel';
-Host User Password Select_priv Insert_priv Update_priv Delete_priv Create_priv Drop_priv Reload_priv Shutdown_priv Process_priv File_priv Grant_priv References_priv Index_priv Alter_priv Show_db_priv Super_priv Create_tmp_table_priv Lock_tables_priv Execute_priv Repl_slave_priv Repl_client_priv Create_view_priv Show_view_priv Create_routine_priv Alter_routine_priv Create_user_priv Event_priv Trigger_priv Create_tablespace_priv ssl_type ssl_cipher x509_issuer x509_subject max_questions max_updates max_connections max_user_connections plugin authentication_string is_role
-% r_sel Y N N N N N N N N N N N N N N N N N N N N N N N N N N N N 0 0 0 0 Y
-select * from mysql.user where user='r_ins';
-Host User Password Select_priv Insert_priv Update_priv Delete_priv Create_priv Drop_priv Reload_priv Shutdown_priv Process_priv File_priv Grant_priv References_priv Index_priv Alter_priv Show_db_priv Super_priv Create_tmp_table_priv Lock_tables_priv Execute_priv Repl_slave_priv Repl_client_priv Create_view_priv Show_view_priv Create_routine_priv Alter_routine_priv Create_user_priv Event_priv Trigger_priv Create_tablespace_priv ssl_type ssl_cipher x509_issuer x509_subject max_questions max_updates max_connections max_user_connections plugin authentication_string is_role
-% r_ins N Y N N N N N N N N N N N N N N N N N N N N N N N N N N N 0 0 0 0 Y
-select * from mysql.user where user='r_upd';
-Host User Password Select_priv Insert_priv Update_priv Delete_priv Create_priv Drop_priv Reload_priv Shutdown_priv Process_priv File_priv Grant_priv References_priv Index_priv Alter_priv Show_db_priv Super_priv Create_tmp_table_priv Lock_tables_priv Execute_priv Repl_slave_priv Repl_client_priv Create_view_priv Show_view_priv Create_routine_priv Alter_routine_priv Create_user_priv Event_priv Trigger_priv Create_tablespace_priv ssl_type ssl_cipher x509_issuer x509_subject max_questions max_updates max_connections max_user_connections plugin authentication_string is_role
-% r_upd N N Y N N N N N N N N N N N N N N N N N N N N N N N N N N 0 0 0 0 Y
-select * from mysql.user where user='r_del';
-Host User Password Select_priv Insert_priv Update_priv Delete_priv Create_priv Drop_priv Reload_priv Shutdown_priv Process_priv File_priv Grant_priv References_priv Index_priv Alter_priv Show_db_priv Super_priv Create_tmp_table_priv Lock_tables_priv Execute_priv Repl_slave_priv Repl_client_priv Create_view_priv Show_view_priv Create_routine_priv Alter_routine_priv Create_user_priv Event_priv Trigger_priv Create_tablespace_priv ssl_type ssl_cipher x509_issuer x509_subject max_questions max_updates max_connections max_user_connections plugin authentication_string is_role
-% r_del N N N Y N N N N N N N N N N N N N N N N N N N N N N N N N 0 0 0 0 Y
-select * from mysql.user where user='r_crt';
-Host User Password Select_priv Insert_priv Update_priv Delete_priv Create_priv Drop_priv Reload_priv Shutdown_priv Process_priv File_priv Grant_priv References_priv Index_priv Alter_priv Show_db_priv Super_priv Create_tmp_table_priv Lock_tables_priv Execute_priv Repl_slave_priv Repl_client_priv Create_view_priv Show_view_priv Create_routine_priv Alter_routine_priv Create_user_priv Event_priv Trigger_priv Create_tablespace_priv ssl_type ssl_cipher x509_issuer x509_subject max_questions max_updates max_connections max_user_connections plugin authentication_string is_role
-% r_crt N N N N Y N N N N N N N N N N N N N N N N N N N N N N N N 0 0 0 0 Y
-select * from mysql.user where user='r_drp';
-Host User Password Select_priv Insert_priv Update_priv Delete_priv Create_priv Drop_priv Reload_priv Shutdown_priv Process_priv File_priv Grant_priv References_priv Index_priv Alter_priv Show_db_priv Super_priv Create_tmp_table_priv Lock_tables_priv Execute_priv Repl_slave_priv Repl_client_priv Create_view_priv Show_view_priv Create_routine_priv Alter_routine_priv Create_user_priv Event_priv Trigger_priv Create_tablespace_priv ssl_type ssl_cipher x509_issuer x509_subject max_questions max_updates max_connections max_user_connections plugin authentication_string is_role
-% r_drp N N N N N Y N N N N N N N N N N N N N N N N N N N N N N N 0 0 0 0 Y
-select * from mysql.user where user='r_rld';
-Host User Password Select_priv Insert_priv Update_priv Delete_priv Create_priv Drop_priv Reload_priv Shutdown_priv Process_priv File_priv Grant_priv References_priv Index_priv Alter_priv Show_db_priv Super_priv Create_tmp_table_priv Lock_tables_priv Execute_priv Repl_slave_priv Repl_client_priv Create_view_priv Show_view_priv Create_routine_priv Alter_routine_priv Create_user_priv Event_priv Trigger_priv Create_tablespace_priv ssl_type ssl_cipher x509_issuer x509_subject max_questions max_updates max_connections max_user_connections plugin authentication_string is_role
-% r_rld N N N N N N Y N N N N N N N N N N N N N N N N N N N N N N 0 0 0 0 Y
-insert into mysql.roles_mapping values ('localhost', 'test_user', 'r_sel');
-insert into mysql.roles_mapping values ('localhost', 'test_user', 'r_ins');
-insert into mysql.roles_mapping values ('localhost', 'test_user', 'r_upd');
-insert into mysql.roles_mapping values ('localhost', 'test_user', 'r_del');
-insert into mysql.roles_mapping values ('localhost', 'test_user', 'r_crt');
-insert into mysql.roles_mapping values ('localhost', 'test_user', 'r_drp');
-insert into mysql.roles_mapping values ('localhost', 'test_user', 'r_rld');
+create role r_sel;
+create role r_ins;
+create role r_upd;
+create role r_del;
+create role r_crt;
+create role r_drp;
+create role r_rld;
+grant select on *.* to r_sel;
+grant insert on *.* to r_ins;
+grant update on *.* to r_upd;
+grant delete on *.* to r_del;
+grant create on *.* to r_crt;
+grant drop on *.* to r_drp;
+grant reload on *.* to r_rld;
+grant r_sel to test_user@localhost;
+grant r_ins to test_user@localhost;
+grant r_upd to test_user@localhost;
+grant r_del to test_user@localhost;
+grant r_crt to test_user@localhost;
+grant r_drp to test_user@localhost;
+grant r_rld to test_user@localhost;
flush privileges;
select * from mysql.roles_mapping;
ERROR 42000: SELECT command denied to user 'test_user'@'localhost' for table 'roles_mapping'
@@ -74,14 +52,14 @@ GRANT r_rld TO 'test_user'@'localhost'
GRANT r_sel TO 'test_user'@'localhost'
GRANT r_upd TO 'test_user'@'localhost'
select * from mysql.roles_mapping;
-Host User Role
-localhost test_user r_crt
-localhost test_user r_del
-localhost test_user r_drp
-localhost test_user r_ins
-localhost test_user r_rld
-localhost test_user r_sel
-localhost test_user r_upd
+Host User Role Admin_option
+localhost test_user r_crt N
+localhost test_user r_del N
+localhost test_user r_drp N
+localhost test_user r_ins N
+localhost test_user r_rld N
+localhost test_user r_sel N
+localhost test_user r_upd N
set role r_ins;
select current_user(), current_role();
current_user() current_role()
@@ -99,7 +77,7 @@ GRANT r_sel TO 'test_user'@'localhost'
GRANT r_upd TO 'test_user'@'localhost'
select * from mysql.roles_mapping;
ERROR 42000: SELECT command denied to user 'test_user'@'localhost' for table 'roles_mapping'
-insert into mysql.roles_mapping values ('', 'r_sel', 'r_rld');
+insert into mysql.roles_mapping values ('', 'r_sel', 'r_rld', 'N');
flush privileges;
ERROR 42000: Access denied; you need (at least one of) the RELOAD privilege(s) for this operation
set role r_rld;
@@ -122,11 +100,11 @@ set role r_ins;
select current_user(), current_role();
current_user() current_role()
test_user@localhost r_ins
-insert into mysql.roles_mapping values ('', 'r_sel', 'r_upd');
-insert into mysql.roles_mapping values ('', 'r_sel', 'r_del');
-insert into mysql.roles_mapping values ('', 'r_sel', 'r_crt');
-insert into mysql.roles_mapping values ('', 'r_sel', 'r_drp');
-insert into mysql.roles_mapping values ('', 'r_del', 'r_ins');
+insert into mysql.roles_mapping values ('', 'r_sel', 'r_upd', 'N');
+insert into mysql.roles_mapping values ('', 'r_sel', 'r_del', 'N');
+insert into mysql.roles_mapping values ('', 'r_sel', 'r_crt', 'N');
+insert into mysql.roles_mapping values ('', 'r_sel', 'r_drp', 'N');
+insert into mysql.roles_mapping values ('', 'r_del', 'r_ins', 'N');
set role r_rld;
select current_user(), current_role();
current_user() current_role()
diff --git a/mysql-test/r/acl_roles_set_role-recursive.result b/mysql-test/r/acl_roles_set_role-recursive.result
index a115434a673..aa3db86cac2 100644
--- a/mysql-test/r/acl_roles_set_role-recursive.result
+++ b/mysql-test/r/acl_roles_set_role-recursive.result
@@ -1,30 +1,26 @@
-create user 'test_user'@'localhost';
-create user 'test_role1'@'';
-update mysql.user set is_role='Y' where user='test_role1';
-insert into mysql.roles_mapping values ('localhost', 'test_user', 'test_role1');
-create user 'test_role2'@'';
-update mysql.user set is_role='Y' where user='test_role2';
-insert into mysql.roles_mapping values ('', 'test_role1', 'test_role2');
-flush privileges;
+create user test_user@localhost;
+create role test_role1;
+grant test_role1 to test_user@localhost;
+create role test_role2;
+grant test_role2 to test_role1@;
select user, host from mysql.user where user not like 'root';
user host
-test_role1 %
-test_role2 %
+test_role1
+test_role2
test_user localhost
select * from mysql.roles_mapping where User like 'test_user';
-Host User Role
-localhost test_user test_role1
+Host User Role Admin_option
+localhost test_user test_role1 N
select * from mysql.roles_mapping where User like 'test_role1';
-Host User Role
- test_role1 test_role2
-grant select on *.* to 'test_role2'@'';
+Host User Role Admin_option
+ test_role1 test_role2 N
+grant select on *.* to test_role2;
select * from mysql.user where user like 'test_role1';
Host User Password Select_priv Insert_priv Update_priv Delete_priv Create_priv Drop_priv Reload_priv Shutdown_priv Process_priv File_priv Grant_priv References_priv Index_priv Alter_priv Show_db_priv Super_priv Create_tmp_table_priv Lock_tables_priv Execute_priv Repl_slave_priv Repl_client_priv Create_view_priv Show_view_priv Create_routine_priv Alter_routine_priv Create_user_priv Event_priv Trigger_priv Create_tablespace_priv ssl_type ssl_cipher x509_issuer x509_subject max_questions max_updates max_connections max_user_connections plugin authentication_string is_role
-% test_role1 N N N N N N N N N N N N N N N N N N N N N N N N N N N N N 0 0 0 0 Y
+ test_role1 N N N N N N N N N N N N N N N N N N N N N N N N N N N N N 0 0 0 0 Y
select * from mysql.user where user like 'test_role2';
Host User Password Select_priv Insert_priv Update_priv Delete_priv Create_priv Drop_priv Reload_priv Shutdown_priv Process_priv File_priv Grant_priv References_priv Index_priv Alter_priv Show_db_priv Super_priv Create_tmp_table_priv Lock_tables_priv Execute_priv Repl_slave_priv Repl_client_priv Create_view_priv Show_view_priv Create_routine_priv Alter_routine_priv Create_user_priv Event_priv Trigger_priv Create_tablespace_priv ssl_type ssl_cipher x509_issuer x509_subject max_questions max_updates max_connections max_user_connections plugin authentication_string is_role
-% test_role2 Y N N N N N N N N N N N N N N N N N N N N N N N N N N N N 0 0 0 0 Y
-flush privileges;
+ test_role2 Y N N N N N N N N N N N N N N N N N N N N N N N N N N N N 0 0 0 0 Y
select * from mysql.roles_mapping;
ERROR 42000: SELECT command denied to user 'test_user'@'localhost' for table 'roles_mapping'
show grants;
@@ -46,8 +42,8 @@ GRANT USAGE ON *.* TO 'test_user'@'localhost'
GRANT test_role1 TO 'test_user'@'localhost'
GRANT test_role2 TO 'test_role1'
select * from mysql.roles_mapping where Host='';
-Host User Role
- test_role1 test_role2
+Host User Role Admin_option
+ test_role1 test_role2 N
show grants;
Grants for test_user@localhost
GRANT SELECT ON *.* TO 'test_role2'
@@ -96,8 +92,8 @@ GRANT USAGE ON *.* TO 'test_user'@'localhost'
GRANT test_role1 TO 'test_user'@'localhost'
GRANT test_role2 TO 'test_role1'
select * from mysql.roles_mapping where Host='';
-Host User Role
- test_role1 test_role2
+Host User Role Admin_option
+ test_role1 test_role2 N
show grants;
Grants for test_user@localhost
GRANT SELECT ON *.* TO 'test_role2'
diff --git a/mysql-test/r/acl_roles_set_role-routine-simple.result b/mysql-test/r/acl_roles_set_role-routine-simple.result
index c2fd6c32b9d..11655544423 100644
--- a/mysql-test/r/acl_roles_set_role-routine-simple.result
+++ b/mysql-test/r/acl_roles_set_role-routine-simple.result
@@ -2,9 +2,9 @@ create user 'test_user'@'localhost';
create role test_role1;
create role test_role2;
create role test_role3;
-insert into mysql.roles_mapping values ('localhost', 'test_user', 'test_role1');
-insert into mysql.roles_mapping values ('localhost', 'test_user', 'test_role3');
-insert into mysql.roles_mapping values ('', 'test_role1', 'test_role2');
+grant test_role1 to test_user@localhost;
+grant test_role3 to test_user@localhost;
+grant test_role2 to test_role1;
select user, host from mysql.user where user not like 'root';
user host
test_role1
@@ -12,10 +12,10 @@ test_role2
test_role3
test_user localhost
select * from mysql.roles_mapping;
-Host User Role
- test_role1 test_role2
-localhost test_user test_role1
-localhost test_user test_role3
+Host User Role Admin_option
+ test_role1 test_role2 N
+localhost test_user test_role1 N
+localhost test_user test_role3 N
create function mysql.test_func (s CHAR(20))
returns CHAR(50) DETERMINISTIC
return concat('Test string: ',s);
diff --git a/mysql-test/r/acl_roles_set_role-simple.result b/mysql-test/r/acl_roles_set_role-simple.result
index 2e5f5c12ab0..3405a6dc0cf 100644
--- a/mysql-test/r/acl_roles_set_role-simple.result
+++ b/mysql-test/r/acl_roles_set_role-simple.result
@@ -1,19 +1,17 @@
-create user 'test_user'@'localhost';
-create user 'test_role1'@'';
-update mysql.user set is_role='Y' where user='test_role1';
-insert into mysql.roles_mapping values ('localhost', 'test_user', 'test_role1');
+create user test_user@localhost;
+create role test_role1;
+grant test_role1 to test_user@localhost;
select user, host from mysql.user where user not like 'root';
user host
-test_role1 %
+test_role1
test_user localhost
select * from mysql.roles_mapping;
-Host User Role
-localhost test_user test_role1
-grant select on *.* to 'test_role1'@'';
+Host User Role Admin_option
+localhost test_user test_role1 N
+grant select on *.* to test_role1;
select * from mysql.user where user='test_role1';
Host User Password Select_priv Insert_priv Update_priv Delete_priv Create_priv Drop_priv Reload_priv Shutdown_priv Process_priv File_priv Grant_priv References_priv Index_priv Alter_priv Show_db_priv Super_priv Create_tmp_table_priv Lock_tables_priv Execute_priv Repl_slave_priv Repl_client_priv Create_view_priv Show_view_priv Create_routine_priv Alter_routine_priv Create_user_priv Event_priv Trigger_priv Create_tablespace_priv ssl_type ssl_cipher x509_issuer x509_subject max_questions max_updates max_connections max_user_connections plugin authentication_string is_role
-% test_role1 Y N N N N N N N N N N N N N N N N N N N N N N N N N N N N 0 0 0 0 Y
-flush privileges;
+ test_role1 Y N N N N N N N N N N N N N N N N N N N N N N N N N N N N 0 0 0 0 Y
select * from mysql.roles_mapping;
ERROR 42000: SELECT command denied to user 'test_user'@'localhost' for table 'roles_mapping'
show grants;
@@ -33,8 +31,8 @@ GRANT SELECT ON *.* TO 'test_role1'
GRANT USAGE ON *.* TO 'test_user'@'localhost'
GRANT test_role1 TO 'test_user'@'localhost'
select * from mysql.roles_mapping;
-Host User Role
-localhost test_user test_role1
+Host User Role Admin_option
+localhost test_user test_role1 N
set role none;
select current_user(), current_role();
current_user() current_role()
diff --git a/mysql-test/r/acl_roles_set_role-table-column-priv.result b/mysql-test/r/acl_roles_set_role-table-column-priv.result
index 72e16090e27..8ff7bed6bca 100644
--- a/mysql-test/r/acl_roles_set_role-table-column-priv.result
+++ b/mysql-test/r/acl_roles_set_role-table-column-priv.result
@@ -1,17 +1,17 @@
-create user 'test_user'@'localhost';
+create user test_user@localhost;
create role test_role1;
create role test_role2;
-insert into mysql.roles_mapping values ('localhost', 'test_user', 'test_role1');
-insert into mysql.roles_mapping values ('', 'test_role1', 'test_role2');
+grant test_role1 to test_user@localhost;
+grant test_role2 to test_role1@;
select user, host from mysql.user where user not like 'root';
user host
test_role1
test_role2
test_user localhost
select * from mysql.roles_mapping;
-Host User Role
- test_role1 test_role2
-localhost test_user test_role1
+Host User Role Admin_option
+ test_role1 test_role2 N
+localhost test_user test_role1 N
grant select (Role) on mysql.roles_mapping to test_role2;
flush privileges;
select * from mysql.roles_mapping;
diff --git a/mysql-test/r/acl_roles_set_role-table-simple.result b/mysql-test/r/acl_roles_set_role-table-simple.result
index b00f216017f..74e4dd87d04 100644
--- a/mysql-test/r/acl_roles_set_role-table-simple.result
+++ b/mysql-test/r/acl_roles_set_role-table-simple.result
@@ -1,17 +1,17 @@
-create user 'test_user'@'localhost';
+create user test_user@localhost;
create role test_role1;
create role test_role2;
-insert into mysql.roles_mapping values ('localhost', 'test_user', 'test_role1');
-insert into mysql.roles_mapping values ('', 'test_role1', 'test_role2');
+grant test_role1 to test_user@localhost;
+grant test_role2 to test_role1@;
select user, host from mysql.user where user not like 'root';
user host
test_role1
test_role2
test_user localhost
select * from mysql.roles_mapping;
-Host User Role
- test_role1 test_role2
-localhost test_user test_role1
+Host User Role Admin_option
+ test_role1 test_role2 N
+localhost test_user test_role1 N
grant select on mysql.roles_mapping to test_role2;
flush privileges;
select * from mysql.roles_mapping;
@@ -36,9 +36,9 @@ GRANT USAGE ON *.* TO 'test_user'@'localhost'
GRANT test_role1 TO 'test_user'@'localhost'
GRANT test_role2 TO 'test_role1'
select * from mysql.roles_mapping;
-Host User Role
- test_role1 test_role2
-localhost test_user test_role1
+Host User Role Admin_option
+ test_role1 test_role2 N
+localhost test_user test_role1 N
show grants;
Grants for test_user@localhost
GRANT SELECT ON `mysql`.`roles_mapping` TO 'test_role2'
diff --git a/mysql-test/r/acl_roles_show_grants.result b/mysql-test/r/acl_roles_show_grants.result
index df535b6ffe9..02a43eca7db 100644
--- a/mysql-test/r/acl_roles_show_grants.result
+++ b/mysql-test/r/acl_roles_show_grants.result
@@ -1,20 +1,19 @@
-create user 'test_user'@'localhost';
+create user test_user@localhost;
create role test_role1;
create role test_role2;
-insert into mysql.roles_mapping values ('localhost', 'test_user', 'test_role1');
-insert into mysql.roles_mapping values ('localhost', 'test_user', 'test_role2');
-insert into mysql.roles_mapping values ('', 'test_role1', 'test_role2');
+grant test_role1 to test_user@localhost;
+grant test_role2 to test_user@localhost;
+grant test_role2 to test_role1@;
select user, host from mysql.user where user not like 'root';
user host
test_role1
test_role2
test_user localhost
select * from mysql.roles_mapping;
-Host User Role
- test_role1 test_role2
-localhost test_user test_role1
-localhost test_user test_role2
-flush privileges;
+Host User Role Admin_option
+ test_role1 test_role2 N
+localhost test_user test_role1 N
+localhost test_user test_role2 N
select user, host from mysql.db;
user host
%
diff --git a/mysql-test/suite/funcs_1/r/is_columns_mysql.result b/mysql-test/suite/funcs_1/r/is_columns_mysql.result
index 512e6384478..139adbbd46a 100644
--- a/mysql-test/suite/funcs_1/r/is_columns_mysql.result
+++ b/mysql-test/suite/funcs_1/r/is_columns_mysql.result
@@ -161,9 +161,10 @@ def mysql proxies_priv Proxied_user 4 NO char 16 48 NULL NULL NULL utf8 utf8_bi
def mysql proxies_priv Timestamp 7 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL 0 NULL NULL timestamp on update CURRENT_TIMESTAMP select,insert,update,references
def mysql proxies_priv User 2 NO char 16 48 NULL NULL NULL utf8 utf8_bin char(16) PRI select,insert,update,references
def mysql proxies_priv With_grant 5 0 NO tinyint NULL NULL 3 0 NULL NULL NULL tinyint(1) select,insert,update,references
-def mysql roles_mapping Host 1 NO char 60 60 NULL NULL NULL latin1 latin1_bin char(60) PRI select,insert,update,references
-def mysql roles_mapping Role 3 NO char 16 16 NULL NULL NULL latin1 latin1_bin char(16) PRI select,insert,update,references
-def mysql roles_mapping User 2 NO char 16 16 NULL NULL NULL latin1 latin1_bin char(16) PRI select,insert,update,references
+def mysql roles_mapping Admin_option 4 N NO enum 1 3 NULL NULL NULL utf8 utf8_general_ci enum('N','Y') select,insert,update,references
+def mysql roles_mapping Host 1 NO char 60 180 NULL NULL NULL utf8 utf8_bin char(60) PRI select,insert,update,references
+def mysql roles_mapping Role 3 NO char 16 48 NULL NULL NULL utf8 utf8_bin char(16) PRI select,insert,update,references
+def mysql roles_mapping User 2 NO char 16 48 NULL NULL NULL utf8 utf8_bin char(16) PRI select,insert,update,references
def mysql servers Db 3 NO char 64 192 NULL NULL NULL utf8 utf8_general_ci char(64) select,insert,update,references
def mysql servers Host 2 NO char 64 192 NULL NULL NULL utf8 utf8_general_ci char(64) select,insert,update,references
def mysql servers Owner 9 NO char 64 192 NULL NULL NULL utf8 utf8_general_ci char(64) select,insert,update,references
@@ -484,9 +485,10 @@ NULL mysql procs_priv Timestamp timestamp NULL NULL NULL NULL timestamp
NULL mysql proxies_priv With_grant tinyint NULL NULL NULL NULL tinyint(1)
3.0000 mysql proxies_priv Grantor char 77 231 utf8 utf8_bin char(77)
NULL mysql proxies_priv Timestamp timestamp NULL NULL NULL NULL timestamp
-1.0000 mysql roles_mapping Host char 60 60 latin1 latin1_bin char(60)
-1.0000 mysql roles_mapping User char 16 16 latin1 latin1_bin char(16)
-1.0000 mysql roles_mapping Role char 16 16 latin1 latin1_bin char(16)
+3.0000 mysql roles_mapping Host char 60 180 utf8 utf8_bin char(60)
+3.0000 mysql roles_mapping User char 16 48 utf8 utf8_bin char(16)
+3.0000 mysql roles_mapping Role char 16 48 utf8 utf8_bin char(16)
+3.0000 mysql roles_mapping Admin_option enum 1 3 utf8 utf8_general_ci enum('N','Y')
3.0000 mysql servers Server_name char 64 192 utf8 utf8_general_ci char(64)
3.0000 mysql servers Host char 64 192 utf8 utf8_general_ci char(64)
3.0000 mysql servers Db char 64 192 utf8 utf8_general_ci char(64)
diff --git a/mysql-test/suite/funcs_1/r/is_tables_mysql.result b/mysql-test/suite/funcs_1/r/is_tables_mysql.result
index 2b18129423b..75d4f7964bb 100644
--- a/mysql-test/suite/funcs_1/r/is_tables_mysql.result
+++ b/mysql-test/suite/funcs_1/r/is_tables_mysql.result
@@ -443,11 +443,11 @@ AUTO_INCREMENT NULL
CREATE_TIME #CRT#
UPDATE_TIME #UT#
CHECK_TIME #CT#
-TABLE_COLLATION latin1_swedish_ci
+TABLE_COLLATION utf8_bin
CHECKSUM NULL
CREATE_OPTIONS #CO#
TABLE_COMMENT #TC#
-user_comment
+user_comment Granted roles
Separator -----------------------------------------------------
TABLE_CATALOG def
TABLE_SCHEMA mysql
diff --git a/mysql-test/t/acl_roles_rename_user.test b/mysql-test/t/acl_roles_rename_user.test
index 247ecf46cf2..890c7b303c7 100644
--- a/mysql-test/t/acl_roles_rename_user.test
+++ b/mysql-test/t/acl_roles_rename_user.test
@@ -2,10 +2,9 @@
#create a user with no privileges
create user test_user@localhost;
create role test_role1;
-insert into mysql.roles_mapping values ('localhost', 'test_user', 'test_role1');
+grant test_role1 to test_user@localhost;
create role test_role2;
-insert into mysql.roles_mapping values ('', 'test_role1', 'test_role2');
-flush privileges;
+grant test_role2 to test_role1;
use mysql;
--sorted_result
diff --git a/mysql-test/t/acl_roles_set_role-database-recursive.test b/mysql-test/t/acl_roles_set_role-database-recursive.test
index 8ad00652539..39134485cfb 100644
--- a/mysql-test/t/acl_roles_set_role-database-recursive.test
+++ b/mysql-test/t/acl_roles_set_role-database-recursive.test
@@ -3,14 +3,13 @@ create user 'test_user'@'localhost';
create role test_role1;
create role test_role2;
-insert into mysql.roles_mapping values ('localhost', 'test_user', 'test_role1');
-insert into mysql.roles_mapping values ('localhost', 'test_user', 'test_role2');
-insert into mysql.roles_mapping values ('', 'test_role1', 'test_role2');
+grant test_role1 to test_user@localhost;
+grant test_role2 to test_user@localhost;
+grant test_role2 to test_role1;
--sorted_result
select user, host from mysql.user where user not like 'root';
--sorted_result
select * from mysql.roles_mapping;
-flush privileges;
--sorted_result
select user, host from mysql.db;
diff --git a/mysql-test/t/acl_roles_set_role-database-simple.test b/mysql-test/t/acl_roles_set_role-database-simple.test
index af514c40315..4db9ee26829 100644
--- a/mysql-test/t/acl_roles_set_role-database-simple.test
+++ b/mysql-test/t/acl_roles_set_role-database-simple.test
@@ -2,12 +2,11 @@
create user 'test_user'@'localhost';
create role test_role1;
-insert into mysql.roles_mapping values ('localhost', 'test_user', 'test_role1');
+grant test_role1 to test_user@localhost;
--sorted_result
select user, host from mysql.user where user not like 'root';
--sorted_result
select * from mysql.roles_mapping;
-flush privileges;
grant select on mysql.* to test_role1;
grant insert, delete on mysql.roles_mapping to test_role1;
@@ -25,7 +24,7 @@ select current_user(), current_role();
select * from mysql.roles_mapping;
--error ER_TABLEACCESS_DENIED_ERROR
insert into mysql.user (user, host) values ('Dummy', 'Dummy');
-insert into mysql.roles_mapping values ('localhost', 'test_user', 'test_role2');
+insert into mysql.roles_mapping values ('localhost', 'test_user', 'test_role2', 'N');
delete from mysql.roles_mapping where Role='test_role2';
use mysql;
@@ -40,7 +39,7 @@ select * from mysql.roles_mapping;
--error ER_TABLEACCESS_DENIED_ERROR
insert into mysql.user (user, host) values ('Dummy', 'Dummy');
--error ER_TABLEACCESS_DENIED_ERROR
-insert into mysql.roles_mapping values ('localhost', 'test_user', 'test_role2');
+insert into mysql.roles_mapping values ('localhost', 'test_user', 'test_role2', 'N');
--error ER_TABLEACCESS_DENIED_ERROR
delete from mysql.roles_mapping where Role='test_role2';
diff --git a/mysql-test/t/acl_roles_set_role-multiple-role.test b/mysql-test/t/acl_roles_set_role-multiple-role.test
index 22d338ca0ad..a2f290ff322 100644
--- a/mysql-test/t/acl_roles_set_role-multiple-role.test
+++ b/mysql-test/t/acl_roles_set_role-multiple-role.test
@@ -1,41 +1,32 @@
#create a user with no privileges
create user 'test_user'@'localhost';
-create user 'r_sel'@'';
-create user 'r_ins'@'';
-create user 'r_upd'@'';
-create user 'r_del'@'';
-create user 'r_crt'@'';
-create user 'r_drp'@'';
-create user 'r_rld'@'';
-update mysql.user set Select_priv='Y' where user like 'r_sel';
-update mysql.user set Insert_priv='Y' where user like 'r_ins';
-update mysql.user set Update_priv='Y' where user like 'r_upd';
-update mysql.user set Delete_priv='Y' where user like 'r_del';
-update mysql.user set Create_priv='Y' where user like 'r_crt';
-update mysql.user set Drop_priv ='Y' where user like 'r_drp';
-update mysql.user set Reload_priv='Y' where user like 'r_rld';
+create role r_sel;
+create role r_ins;
+create role r_upd;
+create role r_del;
+create role r_crt;
+create role r_drp;
+create role r_rld;
-update mysql.user set is_role='Y' where user like 'r\_%';
-
-select * from mysql.user where user='r_sel';
-select * from mysql.user where user='r_ins';
-select * from mysql.user where user='r_upd';
-select * from mysql.user where user='r_del';
-select * from mysql.user where user='r_crt';
-select * from mysql.user where user='r_drp';
-select * from mysql.user where user='r_rld';
+grant select on *.* to r_sel;
+grant insert on *.* to r_ins;
+grant update on *.* to r_upd;
+grant delete on *.* to r_del;
+grant create on *.* to r_crt;
+grant drop on *.* to r_drp;
+grant reload on *.* to r_rld;
#####################################
#set up roles mapping
#####################################
-insert into mysql.roles_mapping values ('localhost', 'test_user', 'r_sel');
-insert into mysql.roles_mapping values ('localhost', 'test_user', 'r_ins');
-insert into mysql.roles_mapping values ('localhost', 'test_user', 'r_upd');
-insert into mysql.roles_mapping values ('localhost', 'test_user', 'r_del');
-insert into mysql.roles_mapping values ('localhost', 'test_user', 'r_crt');
-insert into mysql.roles_mapping values ('localhost', 'test_user', 'r_drp');
-insert into mysql.roles_mapping values ('localhost', 'test_user', 'r_rld');
+grant r_sel to test_user@localhost;
+grant r_ins to test_user@localhost;
+grant r_upd to test_user@localhost;
+grant r_del to test_user@localhost;
+grant r_crt to test_user@localhost;
+grant r_drp to test_user@localhost;
+grant r_rld to test_user@localhost;
flush privileges;
change_user 'test_user';
@@ -59,7 +50,7 @@ select current_user(), current_role();
show grants;
--error ER_TABLEACCESS_DENIED_ERROR
select * from mysql.roles_mapping;
-insert into mysql.roles_mapping values ('', 'r_sel', 'r_rld');
+insert into mysql.roles_mapping values ('', 'r_sel', 'r_rld', 'N');
--error ER_SPECIFIC_ACCESS_DENIED_ERROR
flush privileges;
set role r_rld;
@@ -75,11 +66,11 @@ flush privileges;
set role r_ins;
select current_user(), current_role();
-insert into mysql.roles_mapping values ('', 'r_sel', 'r_upd');
-insert into mysql.roles_mapping values ('', 'r_sel', 'r_del');
-insert into mysql.roles_mapping values ('', 'r_sel', 'r_crt');
-insert into mysql.roles_mapping values ('', 'r_sel', 'r_drp');
-insert into mysql.roles_mapping values ('', 'r_del', 'r_ins');
+insert into mysql.roles_mapping values ('', 'r_sel', 'r_upd', 'N');
+insert into mysql.roles_mapping values ('', 'r_sel', 'r_del', 'N');
+insert into mysql.roles_mapping values ('', 'r_sel', 'r_crt', 'N');
+insert into mysql.roles_mapping values ('', 'r_sel', 'r_drp', 'N');
+insert into mysql.roles_mapping values ('', 'r_del', 'r_ins', 'N');
set role r_rld;
select current_user(), current_role();
flush privileges;
diff --git a/mysql-test/t/acl_roles_set_role-recursive.test b/mysql-test/t/acl_roles_set_role-recursive.test
index 77aeba4c719..867b00b60a0 100644
--- a/mysql-test/t/acl_roles_set_role-recursive.test
+++ b/mysql-test/t/acl_roles_set_role-recursive.test
@@ -1,15 +1,10 @@
#create a user with no privileges
-create user 'test_user'@'localhost';
-create user 'test_role1'@'';
-#manualy create role
-update mysql.user set is_role='Y' where user='test_role1';
-insert into mysql.roles_mapping values ('localhost', 'test_user', 'test_role1');
-create user 'test_role2'@'';
-#manualy create role
-update mysql.user set is_role='Y' where user='test_role2';
-insert into mysql.roles_mapping values ('', 'test_role1', 'test_role2');
-flush privileges;
+create user test_user@localhost;
+create role test_role1;
+grant test_role1 to test_user@localhost;
+create role test_role2;
+grant test_role2 to test_role1@;
--sorted_result
select user, host from mysql.user where user not like 'root';
@@ -17,12 +12,11 @@ select user, host from mysql.user where user not like 'root';
select * from mysql.roles_mapping where User like 'test_user';
--sorted_result
select * from mysql.roles_mapping where User like 'test_role1';
-grant select on *.* to 'test_role2'@'';
+grant select on *.* to test_role2;
--sorted_result
select * from mysql.user where user like 'test_role1';
--sorted_result
select * from mysql.user where user like 'test_role2';
-flush privileges;
change_user 'test_user';
diff --git a/mysql-test/t/acl_roles_set_role-routine-simple.test b/mysql-test/t/acl_roles_set_role-routine-simple.test
index a41e17bd7ef..b076903b0bf 100644
--- a/mysql-test/t/acl_roles_set_role-routine-simple.test
+++ b/mysql-test/t/acl_roles_set_role-routine-simple.test
@@ -3,10 +3,10 @@ create role test_role1;
create role test_role2;
create role test_role3;
-insert into mysql.roles_mapping values ('localhost', 'test_user', 'test_role1');
-insert into mysql.roles_mapping values ('localhost', 'test_user', 'test_role3');
+grant test_role1 to test_user@localhost;
+grant test_role3 to test_user@localhost;
+grant test_role2 to test_role1;
-insert into mysql.roles_mapping values ('', 'test_role1', 'test_role2');
--sorted_result
select user, host from mysql.user where user not like 'root';
--sorted_result
@@ -24,7 +24,6 @@ begin
end|
delimiter ;|
-
grant execute on function mysql.test_func to test_role2;
grant execute on procedure mysql.test_proc to test_role2;
diff --git a/mysql-test/t/acl_roles_set_role-simple.test b/mysql-test/t/acl_roles_set_role-simple.test
index 183bca19dae..fdf915ed897 100644
--- a/mysql-test/t/acl_roles_set_role-simple.test
+++ b/mysql-test/t/acl_roles_set_role-simple.test
@@ -1,18 +1,15 @@
#create a user with no privileges
-create user 'test_user'@'localhost';
-create user 'test_role1'@'';
-#manualy create role
-update mysql.user set is_role='Y' where user='test_role1';
-insert into mysql.roles_mapping values ('localhost', 'test_user', 'test_role1');
+create user test_user@localhost;
+create role test_role1;
+grant test_role1 to test_user@localhost;
--sorted_result
select user, host from mysql.user where user not like 'root';
--sorted_result
select * from mysql.roles_mapping;
-grant select on *.* to 'test_role1'@'';
+grant select on *.* to test_role1;
--sorted_result
select * from mysql.user where user='test_role1';
-flush privileges;
change_user 'test_user';
diff --git a/mysql-test/t/acl_roles_set_role-table-column-priv.test b/mysql-test/t/acl_roles_set_role-table-column-priv.test
index b4d38c207be..dfc21bd4eb9 100644
--- a/mysql-test/t/acl_roles_set_role-table-column-priv.test
+++ b/mysql-test/t/acl_roles_set_role-table-column-priv.test
@@ -1,9 +1,9 @@
-create user 'test_user'@'localhost';
+create user test_user@localhost;
create role test_role1;
create role test_role2;
-insert into mysql.roles_mapping values ('localhost', 'test_user', 'test_role1');
-insert into mysql.roles_mapping values ('', 'test_role1', 'test_role2');
+grant test_role1 to test_user@localhost;
+grant test_role2 to test_role1@;
--sorted_result
select user, host from mysql.user where user not like 'root';
--sorted_result
diff --git a/mysql-test/t/acl_roles_set_role-table-simple.test b/mysql-test/t/acl_roles_set_role-table-simple.test
index 4b4f12e0cf9..dd86f0c11e6 100644
--- a/mysql-test/t/acl_roles_set_role-table-simple.test
+++ b/mysql-test/t/acl_roles_set_role-table-simple.test
@@ -1,9 +1,9 @@
-create user 'test_user'@'localhost';
+create user test_user@localhost;
create role test_role1;
create role test_role2;
-insert into mysql.roles_mapping values ('localhost', 'test_user', 'test_role1');
-insert into mysql.roles_mapping values ('', 'test_role1', 'test_role2');
+grant test_role1 to test_user@localhost;
+grant test_role2 to test_role1@;
--sorted_result
select user, host from mysql.user where user not like 'root';
--sorted_result
diff --git a/mysql-test/t/acl_roles_show_grants.test b/mysql-test/t/acl_roles_show_grants.test
index 5cc22633b8e..3ae166a0a34 100644
--- a/mysql-test/t/acl_roles_show_grants.test
+++ b/mysql-test/t/acl_roles_show_grants.test
@@ -1,16 +1,15 @@
#create a user with no privileges
-create user 'test_user'@'localhost';
+create user test_user@localhost;
create role test_role1;
create role test_role2;
-insert into mysql.roles_mapping values ('localhost', 'test_user', 'test_role1');
-insert into mysql.roles_mapping values ('localhost', 'test_user', 'test_role2');
-insert into mysql.roles_mapping values ('', 'test_role1', 'test_role2');
+grant test_role1 to test_user@localhost;
+grant test_role2 to test_user@localhost;
+grant test_role2 to test_role1@;
--sorted_result
select user, host from mysql.user where user not like 'root';
--sorted_result
select * from mysql.roles_mapping;
-flush privileges;
--sorted_result
select user, host from mysql.db;
diff --git a/scripts/mysql_system_tables.sql b/scripts/mysql_system_tables.sql
index b6187ee3911..87f057338ea 100644
--- a/scripts/mysql_system_tables.sql
+++ b/scripts/mysql_system_tables.sql
@@ -41,7 +41,7 @@ CREATE TABLE IF NOT EXISTS user ( Host char(60) binary DEFAULT '' NOT NULL, Us
-- Remember for later if user table already existed
set @had_user_table= @@warning_count != 0;
-CREATE TABLE IF NOT EXISTS roles_mapping (Host char(60) binary DEFAULT '' NOT NULL, User char(16) binary DEFAULT '' NOT NULL, Role char(16) binary DEFAULT '' NOT NULL, unique index (Host, User, Role));
+CREATE TABLE IF NOT EXISTS roles_mapping ( Host char(60) binary DEFAULT '' NOT NULL, User char(16) binary DEFAULT '' NOT NULL, Role char(16) binary DEFAULT '' NOT NULL, Admin_option enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, UNIQUE (Host, User, Role)) engine=MyISAM CHARACTER SET utf8 COLLATE utf8_bin comment='Granted roles';
CREATE TABLE IF NOT EXISTS func ( name char(64) binary DEFAULT '' NOT NULL, ret tinyint(1) DEFAULT '0' NOT NULL, dl char(128) DEFAULT '' NOT NULL, type enum ('function','aggregate') COLLATE utf8_general_ci NOT NULL, PRIMARY KEY (name) ) engine=MyISAM CHARACTER SET utf8 COLLATE utf8_bin comment='User defined functions';
diff --git a/sql/sql_acl.cc b/sql/sql_acl.cc
index 1824632eaae..e224669c75f 100644
--- a/sql/sql_acl.cc
+++ b/sql/sql_acl.cc
@@ -3774,6 +3774,7 @@ replace_roles_mapping_table(TABLE *table, ROLE_GRANT_PAIR *pair,
system_charset_info);
table->field[2]->store(pair->r_uname, strlen(pair->r_uname),
system_charset_info);
+ table->field[3]->store(1);
key_copy(row_key, table->record[0], table->key_info,
table->key_info->key_length);