From 54733dad5f60d95b6730a69ff719ebbc0eccf670 Mon Sep 17 00:00:00 2001 From: Daniel Nichter Date: Fri, 20 Jul 2012 17:58:44 -0600 Subject: [PATCH 1/2] Test user privs for bug 916168. --- t/pt-table-checksum/privs.t | 28 +++++++++++++++++-- .../samples/privs-bug-916168.sql | 21 ++++++++++++++ 2 files changed, 47 insertions(+), 2 deletions(-) create mode 100644 t/pt-table-checksum/samples/privs-bug-916168.sql diff --git a/t/pt-table-checksum/privs.t b/t/pt-table-checksum/privs.t index 79db0b13..efc1b748 100644 --- a/t/pt-table-checksum/privs.t +++ b/t/pt-table-checksum/privs.t @@ -42,7 +42,7 @@ elsif ( !@{$master_dbh->selectall_arrayref("show databases like 'sakila'")} ) { plan skip_all => 'sakila database is not loaded'; } else { - plan tests => 3; + plan tests => 4; } # The sandbox servers run with lock_wait_timeout=3 and it's not dynamic @@ -94,7 +94,31 @@ diag(`/tmp/12345/use -u root -e "drop user 'ro_checksum_user'\@'%'"`); wait_until( sub { my $rows=$slave2_dbh->selectall_arrayref("SELECT user FROM mysql.user"); - return !grep { ($_->[0] || '') ne 'ro_checksum_user' } @$rows; + return !grep { ($_->[0] || '') eq 'ro_checksum_user' } @$rows; + } +); + +# ############################################################################# +# Bug 916168: bug in pt-table-checksum privileges check +# ############################################################################# +`/tmp/12345/use -u root < $trunk/t/pt-table-checksum/samples/privs-bug-916168.sql`; + +$output = output( + sub { $exit_status = pt_table_checksum::main(@args, + "$master_dsn,u=test_user,p=foo", qw(-t sakila.country)) }, +); + +is( + PerconaTest::count_checksum_results($output, 'rows'), + 109, + "test_user privs work (bug 916168)" +); + +diag(`/tmp/12345/use -u root -e "drop user 'test_user'\@'%'"`); +wait_until( + sub { + my $rows=$slave2_dbh->selectall_arrayref("SELECT user FROM mysql.user"); + return !grep { ($_->[0] || '') eq 'test_user' } @$rows; } ); diff --git a/t/pt-table-checksum/samples/privs-bug-916168.sql b/t/pt-table-checksum/samples/privs-bug-916168.sql new file mode 100644 index 00000000..c58667db --- /dev/null +++ b/t/pt-table-checksum/samples/privs-bug-916168.sql @@ -0,0 +1,21 @@ +grant select, replication slave, replication client, super, process on *.* to 'test_user'@'%' identified by 'foo'; +grant all on percona.* to 'test_user'@'%'; +create database if not exists percona; +use percona; +drop table if exists checksums; +CREATE TABLE `checksums` ( + `db` char(64) NOT NULL, + `tbl` char(64) NOT NULL, + `chunk` int(11) NOT NULL, + `chunk_time` float DEFAULT NULL, + `chunk_index` varchar(200) DEFAULT NULL, + `lower_boundary` text, + `upper_boundary` text, + `this_crc` char(40) NOT NULL, + `this_cnt` int(11) NOT NULL, + `master_crc` char(40) DEFAULT NULL, + `master_cnt` int(11) DEFAULT NULL, + `ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (`db`,`tbl`,`chunk`), + KEY `ts_db_tbl` (`ts`,`db`,`tbl`) +) ENGINE=InnoDB; From b41068291e04de82fe6240506b523bcf8723427b Mon Sep 17 00:00:00 2001 From: Daniel Nichter Date: Sat, 21 Jul 2012 10:13:58 -0600 Subject: [PATCH 2/2] Remove table privs check. --- bin/pt-table-checksum | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/bin/pt-table-checksum b/bin/pt-table-checksum index 059f79aa..bb75b65a 100755 --- a/bin/pt-table-checksum +++ b/bin/pt-table-checksum @@ -8177,15 +8177,8 @@ sub check_repl_table { } else { PTDEBUG && _d('--replicate table', $repl_table, 'already exists'); - # Check it again but this time check the privs. - my $have_tbl_privs = $tp->check_table( - dbh => $dbh, - db => $db, - tbl => $tbl, - all_privs => 1, - ); - die "User does not have all privileges on --replicate table " - . "$repl_table.\n" unless $have_tbl_privs; + # We used to check the table privs here, but: + # https://bugs.launchpad.net/percona-toolkit/+bug/916168 } # Check and wait for the repl table to appear on all slaves.