mirror of
https://github.com/MariaDB/server.git
synced 2025-01-18 13:02:28 +01:00
a5c60b3f29
- GRANT and REVOKE statments didn't have the "updating" flag set and thus statements with a table specified would not replicate if slave filtering rules where turned on. For example "GRANT ... ON test.t1 TO ..." would not replicate. mysql-test/r/rpl_ignore_table.result: Add test results mysql-test/t/rpl_ignore_table.test: Add tests sql/sql_yacc.yy: Pass option TL_OPTION_UPDATING to 'add_table_to_list' when parsing a GRANT or REVOKE and a table specifier is found. This will set the property "updating" on the table and thus the slave filtering rules will be applied. Without setting updating the statement will be not replicated - since "it's not updating anything" - an optimization to quickly skip SELECT's and similar.
126 lines
3.3 KiB
Text
126 lines
3.3 KiB
Text
source include/master-slave.inc;
|
|
|
|
#
|
|
# BUG#16487
|
|
#
|
|
# Requirement:
|
|
# Multi-updates on ignored tables should not fail even if the slave does
|
|
# not have the ignored tables.
|
|
#
|
|
# Note table t1, t2, and t3 are ignored in the option file to this test.
|
|
#
|
|
|
|
--echo **** Test case for BUG#16487 ****
|
|
--echo **** Master ****
|
|
connection master;
|
|
CREATE TABLE test.t4 (a int);
|
|
CREATE TABLE test.t1 (a int);
|
|
|
|
# Expect: The row must *not* by updated on slave, since t1 is ignored
|
|
UPDATE test.t4 NATURAL JOIN test.t1 SET t1.a=5;
|
|
|
|
--echo **** Slave ****
|
|
sync_slave_with_master;
|
|
SELECT * FROM t4;
|
|
|
|
connection master;
|
|
DROP TABLE t1;
|
|
DROP TABLE t4;
|
|
|
|
|
|
#
|
|
# Bug#25482 GRANT statements are not replicated if
|
|
# you use "replicate-ignore-table"
|
|
#
|
|
|
|
--echo **** Test case for BUG#25482 ****
|
|
--echo **** Adding GRANTS on master ****
|
|
|
|
connection master;
|
|
create table test.t1(a int);
|
|
create table test.t4(a int);
|
|
|
|
# Simple user that should not replicate
|
|
GRANT SELECT ON test.t1 TO mysqltest1@localhost;
|
|
|
|
# Partial replicate
|
|
GRANT INSERT ON test.t4 TO mysqltest2@localhost;
|
|
GRANT select, update, insert, references on t1
|
|
to mysqltest2@localhost;
|
|
|
|
# Partial replicate 2
|
|
GRANT SELECT ON test.* TO mysqltest3@localhost;
|
|
GRANT INSERT ON test.t4 TO mysqltest3@localhost;
|
|
GRANT select(a), update(a), insert(a), references(a) on t4
|
|
to mysqltest3@localhost;
|
|
|
|
# Create another database and table
|
|
create database mysqltest2;
|
|
create table mysqltest2.t2 (id int);
|
|
# Create a grant that should replicate
|
|
GRANT SELECT ON mysqltest2.t2 TO mysqltest4@localhost IDENTIFIED BY 'pass';
|
|
|
|
# Create a grant manually
|
|
insert into mysql.user (user, host) values ("mysqltest5", "somehost");
|
|
|
|
# Partial replicate 3 with *.*
|
|
GRANT SELECT ON *.* TO mysqltest6@localhost;
|
|
GRANT INSERT ON *.* TO mysqltest6@localhost;
|
|
GRANT INSERT ON test.* TO mysqltest6@localhost;
|
|
GRANT INSERT ON test.t1 TO mysqltest6@localhost;
|
|
|
|
show grants for mysqltest1@localhost;
|
|
show grants for mysqltest2@localhost;
|
|
show grants for mysqltest3@localhost;
|
|
show grants for mysqltest4@localhost;
|
|
show grants for mysqltest6@localhost;
|
|
|
|
flush privileges;
|
|
show grants for mysqltest5@somehost;
|
|
|
|
|
|
sync_slave_with_master;
|
|
|
|
--echo **** Checking grants on slave ****
|
|
|
|
# Check that grants are replicated to slave
|
|
show grants for mysqltest2@localhost;
|
|
show grants for mysqltest3@localhost;
|
|
show grants for mysqltest4@localhost;
|
|
show grants for mysqltest5@somehost;
|
|
show grants for mysqltest6@localhost;
|
|
|
|
# mysqltest1 should not be on slave
|
|
--error 1141
|
|
show grants for mysqltest1@localhost;
|
|
|
|
--echo **** Revoking grants on master ****
|
|
connection master;
|
|
REVOKE SELECT ON test.t1 FROM mysqltest1@localhost;
|
|
REVOKE SELECT ON mysqltest2.t2 FROM mysqltest4@localhost;
|
|
REVOKE select(a) on t4
|
|
from mysqltest3@localhost;
|
|
|
|
show grants for mysqltest1@localhost;
|
|
show grants for mysqltest3@localhost;
|
|
show grants for mysqltest4@localhost;
|
|
|
|
sync_slave_with_master;
|
|
|
|
--echo **** Checking grants on slave ****
|
|
|
|
# mysqltest1 should not be on slave
|
|
--error 1141
|
|
show grants for mysqltest1@localhost;
|
|
show grants for mysqltest3@localhost;
|
|
show grants for mysqltest4@localhost;
|
|
|
|
# Cleanup
|
|
connection master;
|
|
drop table t1, t4, mysqltest2.t2;
|
|
drop database mysqltest2;
|
|
delete from mysql.user where user like "mysqltest%";
|
|
delete from mysql.db where user like "mysqltest%";
|
|
delete from mysql.tables_priv where user like "mysqltest%";
|
|
delete from mysql.columns_priv where user like "mysqltest%";
|
|
sync_slave_with_master;
|