mirror of
https://github.com/MariaDB/server.git
synced 2025-08-29 00:08:14 +03:00
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.
42 lines
948 B
Plaintext
42 lines
948 B
Plaintext
source include/master-slave.inc;
|
|
-- source include/have_innodb.inc
|
|
-- source include/not_embedded.inc
|
|
-- source include/have_binlog_format_mixed_or_statement.inc
|
|
|
|
let $VERSION=`select version()`;
|
|
|
|
# Bug #21975: grant/revoke statements in transaction
|
|
# used to disappear from binlog upon rallback.
|
|
# Now GRANT/REVOKE do implicitly commit
|
|
# transaction
|
|
|
|
--disable_warnings
|
|
drop database if exists d1;
|
|
--enable_warnings
|
|
create database d1;
|
|
use d1;
|
|
create table t (s1 int) engine=innodb;
|
|
set @@autocommit=0;
|
|
start transaction;
|
|
insert into t values (1);
|
|
grant select on t to x@y;
|
|
#
|
|
# There is no active transaction here
|
|
#
|
|
rollback;
|
|
show grants for x@y;
|
|
--source include/show_binlog_events.inc
|
|
start transaction;
|
|
insert into t values (2);
|
|
revoke select on t from x@y;
|
|
#
|
|
# There is no active transaction here
|
|
#
|
|
commit;
|
|
select * from t;
|
|
show grants for x@y;
|
|
--source include/show_binlog_events.inc
|
|
drop user x@y;
|
|
drop database d1;
|
|
--sync_slave_with_master
|