From b0297c5dccbe3dc52922acef36fc98cbe84fa2c6 Mon Sep 17 00:00:00 2001 From: Deven Bansod Date: Fri, 18 Dec 2015 12:56:40 +0530 Subject: [PATCH] Unset foreign_key_checks while testing insert priv and reset it back Signed-off-by: Deven Bansod --- libraries/check_user_privileges.lib.php | 68 ++++++++++++++++++++----- 1 file changed, 56 insertions(+), 12 deletions(-) diff --git a/libraries/check_user_privileges.lib.php b/libraries/check_user_privileges.lib.php index 1f1dc46f86..47fd0db338 100644 --- a/libraries/check_user_privileges.lib.php +++ b/libraries/check_user_privileges.lib.php @@ -73,21 +73,32 @@ function PMA_checkRequiredPrivilegesForAdjust() if ($privs_available) { $delete_privs_available = $GLOBALS['dbi']->tryQuery( 'DELETE FROM `mysql`.`db` WHERE `host` = "" AND ' - . '`Db` = "" AND `User` = "" LIMIT 1' + . '`Db` = "" AND `User` = ""' ); $privs_available = $delete_privs_available && $privs_available; } if ($privs_available) { + // unset the `foreign_key_checks` temporarily + $GLOBALS['dbi']->tryQuery(' + SET @@session.foreign_key_checks = 0 + '); + $insert_privs_available = $GLOBALS['dbi']->tryQuery( 'INSERT INTO `mysql`.`db`(`host`, `Db`, `User`) VALUES("pma_test_host", ' . '"mysql", "pma_test_user")' ); + + // set the `foreign_key_checks` back + $GLOBALS['dbi']->tryQuery(' + SET @@session.foreign_key_checks = 1 + '); + // If successful test insert, delete the test row if ($insert_privs_available) { $GLOBALS['dbi']->tryQuery( 'DELETE FROM `mysql`.`db` WHERE host = "pma_test_host" AND ' - . 'Db = "mysql" AND User = "pma_test_user" LIMIT 1' + . 'Db = "mysql" AND User = "pma_test_user"' ); } $privs_available = $insert_privs_available && $privs_available; @@ -96,7 +107,7 @@ function PMA_checkRequiredPrivilegesForAdjust() if ($privs_available) { $update_privs_available = $GLOBALS['dbi']->tryQuery( 'UPDATE `mysql`.`db` SET `host` = "" WHERE `host` = "" AND ' - . '`Db` = "" AND `User` = "" LIMIT 1' + . '`Db` = "" AND `User` = ""' ); $privs_available = $update_privs_available && $privs_available; } @@ -115,23 +126,34 @@ function PMA_checkRequiredPrivilegesForAdjust() if ($privs_available) { $delete_privs_available = $GLOBALS['dbi']->tryQuery( 'DELETE FROM `mysql`.`columns_priv` WHERE `host` = "" AND ' - . '`Db` = "" AND `User` = "" LIMIT 1' + . '`Db` = "" AND `User` = ""' ); $privs_available = $delete_privs_available && $privs_available; } if ($privs_available) { + // unset the `foreign_key_checks` temporarily + $GLOBALS['dbi']->tryQuery(' + SET @@session.foreign_key_checks = 0 + '); + $insert_privs_available = $GLOBALS['dbi']->tryQuery( 'INSERT INTO `mysql`.`columns_priv`(`host`, `Db`, `User`, `Table_name`,' . ' `Column_name`) VALUES("pma_test_host", ' . '"mysql", "pma_test_user", "", "")' ); + + // set the `foreign_key_checks` back + $GLOBALS['dbi']->tryQuery(' + SET @@session.foreign_key_checks = 1 + '); + // If successful test insert, delete the test row if ($insert_privs_available) { $GLOBALS['dbi']->tryQuery( 'DELETE FROM `mysql`.`columns_priv` WHERE host = "pma_test_host" AND ' . 'Db = "mysql" AND User = "pma_test_user" AND Table_name = ""' - . ' AND Column_name = "" LIMIT 1' + . ' AND Column_name = ""' ); } $privs_available = $insert_privs_available && $privs_available; @@ -140,7 +162,7 @@ function PMA_checkRequiredPrivilegesForAdjust() if ($privs_available) { $update_privs_available = $GLOBALS['dbi']->tryQuery( 'UPDATE `mysql`.`columns_priv` SET `host` = "" WHERE `host` = "" AND ' - . '`Db` = "" AND `User` = "" AND Column_name = "" AND Table_name = "" LIMIT 1' + . '`Db` = "" AND `User` = "" AND Column_name = "" AND Table_name = ""' ); $privs_available = $update_privs_available && $privs_available; @@ -160,22 +182,33 @@ function PMA_checkRequiredPrivilegesForAdjust() if ($privs_available) { $delete_privs_available = $GLOBALS['dbi']->tryQuery( 'DELETE FROM `mysql`.`tables_priv` WHERE `host` = "" AND ' - . '`Db` = "" AND `User` = "" AND Table_name = "" LIMIT 1' + . '`Db` = "" AND `User` = "" AND Table_name = ""' ); $privs_available = $delete_privs_available && $privs_available; } if ($privs_available) { + // unset the `foreign_key_checks` temporarily + $GLOBALS['dbi']->tryQuery(' + SET @@session.foreign_key_checks = 0 + '); + $insert_privs_available = $GLOBALS['dbi']->tryQuery( 'INSERT INTO `mysql`.`tables_priv`(`host`, `Db`, `User`, `Table_name`' . ') VALUES("pma_test_host", ' . '"mysql", "pma_test_user", "")' ); + + // set the `foreign_key_checks` back + $GLOBALS['dbi']->tryQuery(' + SET @@session.foreign_key_checks = 1 + '); + // If successful test insert, delete the test row if ($insert_privs_available) { $GLOBALS['dbi']->tryQuery( 'DELETE FROM `mysql`.`tables_priv` WHERE host = "pma_test_host" AND ' - . 'Db = "mysql" AND User = "pma_test_user" AND Table_name = "" LIMIT 1' + . 'Db = "mysql" AND User = "pma_test_user" AND Table_name = ""' ); } $privs_available = $insert_privs_available && $privs_available; @@ -184,7 +217,7 @@ function PMA_checkRequiredPrivilegesForAdjust() if ($privs_available) { $update_privs_available = $GLOBALS['dbi']->tryQuery( 'UPDATE `mysql`.`tables_priv` SET `host` = "" WHERE `host` = "" AND ' - . '`Db` = "" AND `User` = "" AND Table_name = "" LIMIT 1' + . '`Db` = "" AND `User` = "" AND Table_name = ""' ); $privs_available = $update_privs_available && $privs_available; @@ -205,23 +238,34 @@ function PMA_checkRequiredPrivilegesForAdjust() $delete_privs_available = $GLOBALS['dbi']->tryQuery( 'DELETE FROM `mysql`.`procs_priv` WHERE `host` = "" AND ' . '`Db` = "" AND `User` = "" AND `Routine_name` = ""' - . ' AND `Routine_type` = "" LIMIT 1' + . ' AND `Routine_type` = ""' ); $privs_available = $delete_privs_available && $privs_available; } if ($privs_available) { + // unset the `foreign_key_checks` temporarily + $GLOBALS['dbi']->tryQuery(' + SET @@session.foreign_key_checks = 0 + '); + $insert_privs_available = $GLOBALS['dbi']->tryQuery( 'INSERT INTO `mysql`.`procs_priv`(`host`, `Db`, `User`, `Routine_name`,' . ' `Routine_type`) VALUES("pma_test_host", ' . '"mysql", "pma_test_user", "", "PROCEDURE")' ); + + // set the `foreign_key_checks` back + $GLOBALS['dbi']->tryQuery(' + SET @@session.foreign_key_checks = 1 + '); + // If successful test insert, delete the test row if ($insert_privs_available) { $GLOBALS['dbi']->tryQuery( 'DELETE FROM `mysql`.`procs_priv` WHERE `host` = "pma_test_host" AND ' . '`Db` = "mysql" AND `User` = "pma_test_user" AND `Routine_name` = ""' - . ' AND `Routine_type` = "PROCEDURE" LIMIT 1' + . ' AND `Routine_type` = "PROCEDURE"' ); } $privs_available = $insert_privs_available && $privs_available; @@ -230,7 +274,7 @@ function PMA_checkRequiredPrivilegesForAdjust() if ($privs_available) { $update_privs_available = $GLOBALS['dbi']->tryQuery( 'UPDATE `mysql`.`procs_priv` SET `host` = "" WHERE `host` = "" AND ' - . '`Db` = "" AND `User` = "" AND `Routine_name` = "" LIMIT 1' + . '`Db` = "" AND `User` = "" AND `Routine_name` = ""' ); $privs_available = $update_privs_available && $privs_available; }