mirror of
https://github.com/MariaDB/server.git
synced 2025-01-17 20:42:30 +01:00
Bug#27293: mysqldump crashes when dumping procedure defined by different user
mysqldump didn't properly handle getting no data on SHOW CREATE PROCEDURE. If S/C/P fails (due to dumping user's insufficient privileges on mysql.proc, say), mysqldump will print a comment to that effect to the output and return an error-code. If the -f (force) option is used, the dump will continue, otherwise, it will abort right there and then. Also fixes Bug#22761, "mysqldump reports no errors when using --routines without mysql.proc privileges" --- Merge tnurnberg@bk-internal.mysql.com:/home/bk/mysql-5.0-maint into mysql.com:/home/tnurnberg/27293/50-27293
This commit is contained in:
parent
edf6b73302
commit
ce1074f6fe
3 changed files with 72 additions and 3 deletions
|
@ -1489,8 +1489,15 @@ static uint dump_routines_for_db(char *db)
|
||||||
routine body of other routines that are not the creator of!
|
routine body of other routines that are not the creator of!
|
||||||
*/
|
*/
|
||||||
DBUG_PRINT("info",("length of body for %s row[2] '%s' is %d",
|
DBUG_PRINT("info",("length of body for %s row[2] '%s' is %d",
|
||||||
routine_name, row[2], (int) strlen(row[2])));
|
routine_name, row[2] ? row[2] : "(null)",
|
||||||
if (strlen(row[2]))
|
row[2] ? (int) strlen(row[2]) : 0));
|
||||||
|
if (row[2] == NULL)
|
||||||
|
{
|
||||||
|
fprintf(sql_file, "\n-- insufficient privileges to %s\n", query_buff);
|
||||||
|
fprintf(sql_file, "-- does %s have permissions on mysql.proc?\n\n", current_user);
|
||||||
|
maybe_die(EX_MYSQLERR,"%s has insufficent privileges to %s!", current_user, query_buff);
|
||||||
|
}
|
||||||
|
else if (strlen(row[2]))
|
||||||
{
|
{
|
||||||
char *query_str= NULL;
|
char *query_str= NULL;
|
||||||
char *definer_begin;
|
char *definer_begin;
|
||||||
|
@ -1540,7 +1547,7 @@ static uint dump_routines_for_db(char *db)
|
||||||
/*
|
/*
|
||||||
we need to change sql_mode only for the CREATE
|
we need to change sql_mode only for the CREATE
|
||||||
PROCEDURE/FUNCTION otherwise we may need to re-quote routine_name
|
PROCEDURE/FUNCTION otherwise we may need to re-quote routine_name
|
||||||
*/;
|
*/
|
||||||
fprintf(sql_file, "/*!50003 SET SESSION SQL_MODE=\"%s\"*/;;\n",
|
fprintf(sql_file, "/*!50003 SET SESSION SQL_MODE=\"%s\"*/;;\n",
|
||||||
row[1] /* sql_mode */);
|
row[1] /* sql_mode */);
|
||||||
fprintf(sql_file, "/*!50003 %s */;;\n",
|
fprintf(sql_file, "/*!50003 %s */;;\n",
|
||||||
|
|
|
@ -3282,6 +3282,33 @@ v3 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VI
|
||||||
drop database bug23491_original;
|
drop database bug23491_original;
|
||||||
drop database bug23491_restore;
|
drop database bug23491_restore;
|
||||||
use test;
|
use test;
|
||||||
|
#
|
||||||
|
# Bug 27293: mysqldump crashes when dumping routines
|
||||||
|
# defined by a different user
|
||||||
|
#
|
||||||
|
# Bug #22761: mysqldump reports no errors when using
|
||||||
|
# --routines without mysql.proc privileges
|
||||||
|
#
|
||||||
|
create database mysqldump_test_db;
|
||||||
|
grant all privileges on mysqldump_test_db.* to user1;
|
||||||
|
grant all privileges on mysqldump_test_db.* to user2;
|
||||||
|
create procedure mysqldump_test_db.sp1() select 'hello';
|
||||||
|
DELIMITER ;;
|
||||||
|
|
||||||
|
-- insufficient privileges to SHOW CREATE PROCEDURE `sp1`
|
||||||
|
-- does user2 have permissions on mysql.proc?
|
||||||
|
|
||||||
|
DELIMITER ;
|
||||||
|
DELIMITER ;;
|
||||||
|
/*!50003 SET SESSION SQL_MODE=""*/;;
|
||||||
|
/*!50003 CREATE*/ /*!50020 DEFINER=`user1`@`%`*/ /*!50003 PROCEDURE `sp1`()
|
||||||
|
select 'hello' */;;
|
||||||
|
/*!50003 SET SESSION SQL_MODE=@OLD_SQL_MODE*/;;
|
||||||
|
DELIMITER ;
|
||||||
|
drop procedure sp1;
|
||||||
|
drop user user1;
|
||||||
|
drop user user2;
|
||||||
|
drop database mysqldump_test_db;
|
||||||
#
|
#
|
||||||
# End of 5.0 tests
|
# End of 5.0 tests
|
||||||
#
|
#
|
||||||
|
|
|
@ -1495,6 +1495,41 @@ drop database bug23491_original;
|
||||||
drop database bug23491_restore;
|
drop database bug23491_restore;
|
||||||
use test;
|
use test;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Bug 27293: mysqldump crashes when dumping routines
|
||||||
|
--echo # defined by a different user
|
||||||
|
--echo #
|
||||||
|
--echo # Bug #22761: mysqldump reports no errors when using
|
||||||
|
--echo # --routines without mysql.proc privileges
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
create database mysqldump_test_db;
|
||||||
|
|
||||||
|
grant all privileges on mysqldump_test_db.* to user1;
|
||||||
|
grant all privileges on mysqldump_test_db.* to user2;
|
||||||
|
|
||||||
|
connect (user27293,localhost,user1,,mysqldump_test_db,$MASTER_MYPORT,$MASTER_MYSOCK);
|
||||||
|
connection user27293;
|
||||||
|
|
||||||
|
create procedure mysqldump_test_db.sp1() select 'hello';
|
||||||
|
|
||||||
|
--error 2
|
||||||
|
--exec $MYSQL_DUMP -f --compact --user=user2 --password= -h 127.0.0.1 -P $MASTER_MYPORT --routines mysqldump_test_db
|
||||||
|
|
||||||
|
--exec $MYSQL_DUMP -f --compact --user=user1 --password= -h 127.0.0.1 -P $MASTER_MYPORT --routines mysqldump_test_db
|
||||||
|
|
||||||
|
drop procedure sp1;
|
||||||
|
|
||||||
|
connection default;
|
||||||
|
drop user user1;
|
||||||
|
drop user user2;
|
||||||
|
|
||||||
|
drop database mysqldump_test_db;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
--echo #
|
--echo #
|
||||||
--echo # End of 5.0 tests
|
--echo # End of 5.0 tests
|
||||||
--echo #
|
--echo #
|
||||||
|
|
Loading…
Reference in a new issue