mirror of
https://github.com/MariaDB/server.git
synced 2025-01-19 05:22:25 +01:00
e998dffde7
RENAME TABLE, unlike other DDLs, was getting replicated before the access check was performed. As a result, the command could get get replicated and thus executed on other nodes, even if it fails on the originating node due to permission issues. Fixed by moving the logic to check user privileges before replicating the command.
52 lines
1 KiB
Text
52 lines
1 KiB
Text
--source include/galera_cluster.inc
|
|
--source include/have_innodb.inc
|
|
|
|
--echo #
|
|
--echo # MDEV-8598 : Failed MySQL DDL commands and Galera replication
|
|
--echo #
|
|
--echo # On node 1
|
|
--connection node_1
|
|
USE test;
|
|
--disable_warnings
|
|
DROP TABLE IF EXISTS t1, t2;
|
|
--enable_warnings
|
|
|
|
CREATE TABLE t1(i INT) ENGINE=INNODB;
|
|
INSERT INTO t1 VALUE(1);
|
|
SELECT * FROM t1;
|
|
|
|
--echo # Create a new user 'foo' with limited privileges
|
|
GRANT SELECT on test.* TO foo@localhost;
|
|
|
|
--echo # Open connection to the 1st node using 'test_user1' user.
|
|
--let $port_1= \$NODE_MYPORT_1
|
|
--connect(foo_node_1,localhost,foo,,test,$port_1,)
|
|
|
|
--connection foo_node_1
|
|
SELECT * FROM t1;
|
|
--echo # Following RENAME should not replicate to other node.
|
|
--error ER_TABLEACCESS_DENIED_ERROR
|
|
RENAME TABLE t1 TO t2;
|
|
|
|
--echo # On node 2
|
|
--connection node_2
|
|
USE test;
|
|
SELECT * FROM t1;
|
|
|
|
--echo # On node_1
|
|
--connection node_1
|
|
RENAME TABLE t1 TO t2;
|
|
SHOW TABLES;
|
|
|
|
--echo # On node 2
|
|
--connection node_2
|
|
USE test;
|
|
SELECT * FROM t2;
|
|
|
|
# Cleanup
|
|
--connection node_1
|
|
DROP USER foo@localhost;
|
|
DROP TABLE t2;
|
|
|
|
--echo # End of tests
|
|
|