138 lines
4.6 KiB
Plaintext
138 lines
4.6 KiB
Plaintext
###############################################################################
|
|
# Bug#20049894: AUTOMATIC_SP_PRIVILEGES ARE NOT CORRECTLY REPLICATED WHEN
|
|
# SETTING DEFINER
|
|
#
|
|
# Problem:
|
|
# ========
|
|
# Privileges created by automatic_sp_privileges are not correctly replicated
|
|
# when the procedure is created by a super user using DEFINER.
|
|
#
|
|
# Test:
|
|
# =====
|
|
# Have a privileged user who already has EXECUTE and ALTER ROUTINE privileges
|
|
# and execute CREATE PROCEDURE command with and without DEFINER class.
|
|
# mysq.procs_priv table should not be updated. Take a non privileged user and
|
|
# execute CREATE PROCEDURE command with and without DEFINER class.
|
|
# mysql.procs_priv table should be updated.
|
|
###############################################################################
|
|
--source include/master-slave.inc
|
|
--source include/rpl_connection_master.inc
|
|
|
|
CREATE TABLE t1 (f INT NOT NULL PRIMARY KEY);
|
|
INSERT INTO t1 VALUES (10);
|
|
INSERT INTO t1 VALUES (20);
|
|
--source include/sync_slave_sql_with_master.inc
|
|
|
|
# Case 1: Privileged user root creating procedure with
|
|
# Definer. Procs_priv table should be empty
|
|
--source include/rpl_connection_master.inc
|
|
CREATE USER 'testuser'@'localhost';
|
|
GRANT CREATE ROUTINE ON test.* TO 'testuser'@'localhost';
|
|
GRANT REPLICATION CLIENT ON *.* TO 'testuser'@'localhost';
|
|
FLUSH PRIVILEGES;
|
|
|
|
DELIMITER |;
|
|
CREATE DEFINER='testuser'@'localhost' PROCEDURE row_cnt()
|
|
BEGIN
|
|
SELECT COUNT(*) as total_rows FROM test.t1;
|
|
END|
|
|
DELIMITER ;|
|
|
--source include/sync_slave_sql_with_master.inc
|
|
|
|
--source include/rpl_connection_master.inc
|
|
--let $assert_text= Assert that mysql.procs_priv table is empty
|
|
--let $assert_cond= [SELECT COUNT(*) FROM mysql.procs_priv] = 0
|
|
--source include/assert.inc
|
|
|
|
--source include/rpl_connection_slave.inc
|
|
--let $assert_text= Assert that mysql.procs_priv table is empty
|
|
--let $assert_cond= [SELECT COUNT(*) FROM mysql.procs_priv] = 0
|
|
--source include/assert.inc
|
|
|
|
--source include/rpl_connection_master.inc
|
|
DROP PROCEDURE row_cnt;
|
|
--source include/sync_slave_sql_with_master.inc
|
|
|
|
# Case 2: Privileged user root creating procedure without
|
|
# Definer. Procs_priv table should be empty
|
|
--source include/rpl_connection_master.inc
|
|
DELIMITER |;
|
|
CREATE PROCEDURE row_cnt()
|
|
BEGIN
|
|
SELECT COUNT(*) as total_rows FROM test.t1;
|
|
END|
|
|
DELIMITER ;|
|
|
--source include/sync_slave_sql_with_master.inc
|
|
|
|
--source include/rpl_connection_master.inc
|
|
--let $assert_text= Assert that mysql.procs_priv table is empty
|
|
--let $assert_cond= [SELECT COUNT(*) FROM mysql.procs_priv] = 0
|
|
--source include/assert.inc
|
|
|
|
--source include/rpl_connection_slave.inc
|
|
--let $assert_text= Assert that mysql.procs_priv table is empty
|
|
--let $assert_cond= [SELECT COUNT(*) FROM mysql.procs_priv] = 0
|
|
--source include/assert.inc
|
|
|
|
--source include/rpl_connection_master.inc
|
|
DROP PROCEDURE row_cnt;
|
|
--source include/sync_slave_sql_with_master.inc
|
|
|
|
# Case 3: Non Privileged user testuser creating procedure with
|
|
# Definer. Procs_priv table should be updated
|
|
--connect(con1,localhost,testuser,,)
|
|
--connection con1
|
|
DELIMITER |;
|
|
CREATE DEFINER='testuser'@'localhost' PROCEDURE row_cnt()
|
|
BEGIN
|
|
SELECT COUNT(*) as total_rows FROM test.t1;
|
|
END|
|
|
DELIMITER ;|
|
|
--source include/sync_slave_sql_with_master.inc
|
|
|
|
--source include/rpl_connection_master.inc
|
|
--let $assert_text= Assert that mysql.procs_priv table has one row for testuser
|
|
--let $assert_cond= [SELECT COUNT(*) FROM mysql.procs_priv WHERE User="testuser"] = 1
|
|
--source include/assert.inc
|
|
|
|
--source include/rpl_connection_slave.inc
|
|
--let $assert_text= Assert that mysql.procs_priv table has one row for testuser
|
|
--let $assert_cond= [SELECT COUNT(*) FROM mysql.procs_priv WHERE User="testuser"] = 1
|
|
--source include/assert.inc
|
|
|
|
--connection con1
|
|
DROP PROCEDURE row_cnt;
|
|
--source include/sync_slave_sql_with_master.inc
|
|
|
|
# Case 4: Non Privileged user testuser creating procedure with
|
|
# Definer. Procs_priv table should be updated
|
|
--connection con1
|
|
DELIMITER |;
|
|
CREATE PROCEDURE row_cnt()
|
|
BEGIN
|
|
SELECT COUNT(*) as total_rows FROM test.t1;
|
|
END|
|
|
DELIMITER ;|
|
|
--source include/sync_slave_sql_with_master.inc
|
|
|
|
--source include/rpl_connection_master.inc
|
|
--let $assert_text= Assert that mysql.procs_priv table has one row for testuser
|
|
--let $assert_cond= [SELECT COUNT(*) FROM mysql.procs_priv WHERE User="testuser"] = 1
|
|
--source include/assert.inc
|
|
|
|
--source include/rpl_connection_slave.inc
|
|
--let $assert_text= Assert that mysql.procs_priv table has one row for testuser
|
|
--let $assert_cond= [SELECT COUNT(*) FROM mysql.procs_priv WHERE User="testuser"] = 1
|
|
--source include/assert.inc
|
|
|
|
# Cleanup
|
|
--source include/rpl_connection_master.inc
|
|
DROP TABLE t1;
|
|
DROP PROCEDURE row_cnt;
|
|
DROP USER 'testuser'@'localhost';
|
|
|
|
--source include/rpl_end.inc
|
|
|
|
--connection master
|
|
--source suite/xengine/include/check_xengine_log_error.inc
|