mirror of
https://github.com/MariaDB/server.git
synced 2025-01-17 20:42:30 +01:00
3b013646e1
replicate-*-table rules which exclude 'mysql' tables (e.g. replicate-wild-ignore-table=mysql.%). This was already the behaviour for GRANT/REVOKE, I'm extending it to SET PASSWORD because it seems very logical (the contrary seems illogical). 2 new tests: - one to test if GRANT and SET PASSWORD are replicated - one to test if they are not replicated if replicate-wild-ignore-table=mysql.% The 2nd is also a testcase for BUG#980. sql/sql_acl.cc: Fix so that SET PASSWORD is not replicated by the slave if running with replicate-*-table rules which exclude 'mysql' tables (e.g. replicate-wild-ignore-table=mysql.%). This was already the behaviour for GRANT/REVOKE, I'm extending it to SET PASSWORD because it seems very logical (the contrary seems illogical).
57 lines
1.9 KiB
Text
57 lines
1.9 KiB
Text
# Test that GRANT is not replicated to the slave
|
|
# when --replicate-wild-ignore-table=mysql.%
|
|
# In BUG#980, this test would _randomly_ fail.
|
|
|
|
source include/master-slave.inc;
|
|
|
|
# do not be influenced by other tests.
|
|
connection master;
|
|
delete from mysql.user where user='rpl_ignore_grant';
|
|
delete from mysql.db where user='rpl_ignore_grant';
|
|
flush privileges;
|
|
save_master_pos;
|
|
connection slave;
|
|
sync_with_master;
|
|
# as these DELETE were not replicated, we need to do them manually on the
|
|
# slave.
|
|
delete from mysql.user where user='rpl_ignore_grant';
|
|
delete from mysql.db where user='rpl_ignore_grant';
|
|
flush privileges;
|
|
|
|
# test non-replication of GRANT
|
|
connection master;
|
|
grant select on *.* to rpl_ignore_grant@localhost;
|
|
grant drop on test.* to rpl_ignore_grant@localhost;
|
|
show grants for rpl_ignore_grant@localhost;
|
|
save_master_pos;
|
|
connection slave;
|
|
sync_with_master;
|
|
--error 1141 #("no such grant for user")
|
|
show grants for rpl_ignore_grant@localhost;
|
|
# check it another way
|
|
select count(*) from mysql.user where user='rpl_ignore_grant';
|
|
select count(*) from mysql.db where user='rpl_ignore_grant';
|
|
|
|
# test non-replication of SET PASSWORD
|
|
# first force creation of the user on slave (because as the user does not exist
|
|
# on slave, the SET PASSWORD may be replicated but silently do nothing; this is
|
|
# not what we want; we want it to be not-replicated).
|
|
grant select on *.* to rpl_ignore_grant@localhost;
|
|
connection master;
|
|
set password for rpl_ignore_grant@localhost=password("does it work?");
|
|
save_master_pos;
|
|
connection slave;
|
|
sync_with_master;
|
|
select password<>'' from mysql.user where user='rpl_ignore_grant';
|
|
|
|
# clear what we have done, to not influence other tests.
|
|
connection master;
|
|
delete from mysql.user where user='rpl_ignore_grant';
|
|
delete from mysql.db where user='rpl_ignore_grant';
|
|
flush privileges;
|
|
save_master_pos;
|
|
connection slave;
|
|
sync_with_master;
|
|
delete from mysql.user where user='rpl_ignore_grant';
|
|
delete from mysql.db where user='rpl_ignore_grant';
|
|
flush privileges;
|