mirror of
https://github.com/MariaDB/server.git
synced 2025-02-01 19:41:47 +01:00
788c28aceb
REVOKE/GRANT; ALTER EVENT. The following statements support the CURRENT_USER() where a user is needed. DROP USER RENAME USER CURRENT_USER() ... GRANT ... TO CURRENT_USER() REVOKE ... FROM CURRENT_USER() ALTER DEFINER = CURRENT_USER() EVENT but, When these statements are binlogged, CURRENT_USER() just is binlogged as 'CURRENT_USER()', it is not expanded to the real user name. When slave executes the log event, 'CURRENT_USER()' is expand to the user of slave SQL thread, but SQL thread's user name always NULL. This breaks the replication. After this patch, All above statements are rewritten when they are binlogged. The CURRENT_USER() is expanded to the real user's name and host.
189 lines
5.5 KiB
Text
189 lines
5.5 KiB
Text
##################################################################
|
|
# Author: Giuseppe #
|
|
# Date: 2006-12-20 #
|
|
# Purpose: To test that event effects are replicated #
|
|
# in both row based and statement based format #
|
|
##################################################################
|
|
|
|
--source include/not_embedded.inc
|
|
--source include/master-slave.inc
|
|
|
|
SET @old_event_scheduler = @@global.event_scheduler;
|
|
set global event_scheduler=1;
|
|
|
|
let $engine_type= MyISAM;
|
|
|
|
set binlog_format=row;
|
|
|
|
# Embedded server doesn't support binlogging
|
|
--source include/rpl_events.inc
|
|
|
|
set binlog_format=statement;
|
|
|
|
# Embedded server doesn't support binlogging
|
|
--source include/rpl_events.inc
|
|
|
|
#
|
|
# Bug #28953 Using events in a replication let the slave crash.
|
|
#
|
|
|
|
connection master;
|
|
|
|
CREATE TABLE t28953 (a INT);
|
|
|
|
DELIMITER |;
|
|
CREATE EVENT event1 ON SCHEDULE EVERY 1 YEAR
|
|
DO BEGIN
|
|
select * from t28953;
|
|
END;|
|
|
DELIMITER ;|
|
|
|
|
ALTER EVENT event1 RENAME TO event2;
|
|
|
|
sync_slave_with_master;
|
|
|
|
connection master;
|
|
|
|
DROP EVENT event2;
|
|
|
|
#
|
|
# BUG#44331
|
|
# This test verifies if the definer is consistent between master and slave,
|
|
# when the event is created without the DEFINER clause set explicitly or the
|
|
# DEFINER is set to CURRENT_USER
|
|
#
|
|
CREATE TABLE test.t1(details CHAR(30));
|
|
|
|
CREATE EVENT /*!50000 event44331_1 */
|
|
ON SCHEDULE AT CURRENT_TIMESTAMP
|
|
ON COMPLETION PRESERVE DISABLE
|
|
DO INSERT INTO test.t1 VALUES('event event44331_1 fired - no definer');
|
|
|
|
CREATE DEFINER=CURRENT_USER /*!50000 EVENT event44331_2 */
|
|
ON SCHEDULE AT CURRENT_TIMESTAMP
|
|
ON COMPLETION PRESERVE DISABLE
|
|
DO INSERT INTO test.t1 VALUES('event event44331_2 fired - DEFINER=CURRENT_USER');
|
|
|
|
CREATE DEFINER=CURRENT_USER() EVENT event44331_3
|
|
ON SCHEDULE AT CURRENT_TIMESTAMP
|
|
ON COMPLETION PRESERVE DISABLE
|
|
DO INSERT INTO test.t1 VALUES('event event44331_3 fired - DEFINER=CURRENT_USER() function');
|
|
|
|
CREATE /*!50000 DEFINER='user44331' */ EVENT event44331_4
|
|
ON SCHEDULE AT CURRENT_TIMESTAMP
|
|
ON COMPLETION PRESERVE DISABLE
|
|
DO INSERT INTO test.t1 VALUES('event event44331_4 fired - DEFINER=user1');
|
|
|
|
--echo #on master
|
|
select EVENT_SCHEMA, EVENT_NAME, DEFINER from information_schema.events
|
|
where EVENT_NAME='event44331_1';
|
|
select EVENT_SCHEMA, EVENT_NAME, DEFINER from information_schema.events
|
|
where EVENT_NAME='event44331_2';
|
|
select EVENT_SCHEMA, EVENT_NAME, DEFINER from information_schema.events
|
|
where EVENT_NAME='event44331_3';
|
|
select EVENT_SCHEMA, EVENT_NAME, DEFINER from information_schema.events
|
|
where EVENT_NAME='event44331_4';
|
|
|
|
sync_slave_with_master;
|
|
connection slave;
|
|
--echo #on slave
|
|
select EVENT_SCHEMA, EVENT_NAME, DEFINER from information_schema.events
|
|
where EVENT_NAME='event44331_1';
|
|
select EVENT_SCHEMA, EVENT_NAME, DEFINER from information_schema.events
|
|
where EVENT_NAME='event44331_2';
|
|
select EVENT_SCHEMA, EVENT_NAME, DEFINER from information_schema.events
|
|
where EVENT_NAME='event44331_3';
|
|
select EVENT_SCHEMA, EVENT_NAME, DEFINER from information_schema.events
|
|
where EVENT_NAME='event44331_4';
|
|
|
|
connection master;
|
|
SET @@global.event_scheduler= @old_event_scheduler;
|
|
DROP TABLE t28953;
|
|
DROP TABLE t1;
|
|
DROP EVENT event44331_1;
|
|
DROP EVENT event44331_2;
|
|
DROP EVENT event44331_3;
|
|
DROP EVENT event44331_4;
|
|
sync_slave_with_master;
|
|
|
|
#
|
|
# BUG#48321
|
|
# This test verifies if the definer is consistent between master and slave,
|
|
# when the event is created or altered with the DEFINER clause that the
|
|
# DEFINER is set to CURRENT_USER()
|
|
#
|
|
connection master;
|
|
--disable_warnings
|
|
DROP VIEW IF EXISTS events_view;
|
|
DROP EVENT IF EXISTS event48321_1;
|
|
DROP EVENT IF EXISTS event48321_2;
|
|
DROP EVENT IF EXISTS event48321_3;
|
|
DROP EVENT IF EXISTS event48321_4;
|
|
--enable_warnings
|
|
|
|
CREATE VIEW events_view AS
|
|
SELECT EVENT_SCHEMA, EVENT_NAME, DEFINER FROM INFORMATION_SCHEMA.EVENTS
|
|
WHERE EVENT_NAME LIKE 'event48321%';
|
|
let $diff_table_1= master:test.events_view;
|
|
let $diff_table_2= slave:test.events_view;
|
|
|
|
CREATE DEFINER=CURRENT_USER() /*!50000 EVENT event48321_1 */
|
|
ON SCHEDULE AT CURRENT_TIMESTAMP
|
|
ON COMPLETION PRESERVE DISABLE
|
|
DO SELECT 48321 as BUG;
|
|
|
|
CREATE DEFINER=CURRENT_USER() EVENT event48321_2
|
|
ON SCHEDULE AT CURRENT_TIMESTAMP
|
|
ON COMPLETION PRESERVE DISABLE
|
|
DO SELECT 48321 as BUG;
|
|
|
|
CREATE /*!50000 DEFINER=CURRENT_USER() */ EVENT event48321_3
|
|
ON SCHEDULE AT CURRENT_TIMESTAMP
|
|
ON COMPLETION PRESERVE DISABLE
|
|
DO SELECT 48321 as BUG;
|
|
sync_slave_with_master;
|
|
|
|
--source include/diff_tables.inc
|
|
|
|
connection master;
|
|
ALTER DEFINER=CURRENT_USER() EVENT event48321_1 RENAME TO event48321_4;
|
|
|
|
ALTER DEFINER=CURRENT_USER() EVENT event48321_2
|
|
ON SCHEDULE AT CURRENT_TIMESTAMP
|
|
ON COMPLETION PRESERVE DISABLE
|
|
DO SELECT 48321 as BUG;
|
|
|
|
ALTER /*!50000 DEFINER=CURRENT_USER() */ EVENT event48321_3
|
|
ON SCHEDULE AT CURRENT_TIMESTAMP
|
|
ON COMPLETION PRESERVE DISABLE
|
|
DO SELECT 48321 as BUG;
|
|
sync_slave_with_master;
|
|
|
|
--source include/diff_tables.inc
|
|
|
|
# Two statements in on query
|
|
connection master;
|
|
DELIMITER |;
|
|
ALTER /*!50000 DEFINER=CURRENT_USER() */ EVENT event48321_3
|
|
ON SCHEDULE AT CURRENT_TIMESTAMP
|
|
ON COMPLETION PRESERVE DISABLE
|
|
DO SELECT 48321 as BUG; ALTER EVENT event48321_2 ENABLE |
|
|
DELIMITER ;|
|
|
sync_slave_with_master;
|
|
|
|
--source include/diff_tables.inc
|
|
|
|
#No Event boday
|
|
connection master;
|
|
ALTER EVENT event48321_3 ENABLE;
|
|
sync_slave_with_master;
|
|
|
|
--source include/diff_tables.inc
|
|
|
|
connection master;
|
|
DROP EVENT event48321_4;
|
|
DROP EVENT event48321_2;
|
|
DROP EVENT event48321_3;
|
|
DROP VIEW events_view;
|
|
--source include/master-slave-end.inc
|
|
|