Fix collation error when checking for grant permission
Signed-off-by: Maurício Meneghini Fauth <mauricio@mfauth.net>
This commit is contained in:
parent
d6e9e653d3
commit
aeb649ac6d
@ -1794,7 +1794,7 @@ class DatabaseInterface implements DbalInterface
|
||||
return $hasGrantPrivilege;
|
||||
}
|
||||
|
||||
$collation = $this->getServerCollation();
|
||||
$collation = (string) $this->getVariable('collation_connection');
|
||||
|
||||
[$user, $host] = $this->getCurrentUserAndHost();
|
||||
$query = QueryGenerator::getInformationSchemaDataForGranteeRequest($user, $host, $collation);
|
||||
@ -1853,7 +1853,7 @@ class DatabaseInterface implements DbalInterface
|
||||
return $hasCreatePrivilege;
|
||||
}
|
||||
|
||||
$collation = $this->getServerCollation();
|
||||
$collation = (string) $this->getVariable('collation_connection');
|
||||
|
||||
[$user, $host] = $this->getCurrentUserAndHost();
|
||||
$query = QueryGenerator::getInformationSchemaDataForCreateRequest($user, $host, $collation);
|
||||
|
||||
@ -39,12 +39,12 @@ class PrivilegesControllerTest extends AbstractTestCase
|
||||
$PMA_PHP_SELF = 'index.php';
|
||||
|
||||
$dbiDummy = $this->createDbiDummy();
|
||||
$dbiDummy->addResult('SELECT @@collation_server', [['utf8mb4_uca1400_ai_ci']]);
|
||||
// phpcs:ignore Generic.Files.LineLength.TooLong
|
||||
// phpcs:disable Generic.Files.LineLength.TooLong
|
||||
$dbiDummy->addResult('SHOW SESSION VARIABLES LIKE \'collation_connection\';', [['collation_connection', 'utf8mb4_uca1400_ai_ci']]);
|
||||
$dbiDummy->addResult("SELECT 1 FROM `INFORMATION_SCHEMA`.`USER_PRIVILEGES` WHERE `PRIVILEGE_TYPE` = 'CREATE USER' AND '''pma_test''@''localhost''' LIKE `GRANTEE` UNION SELECT 1 FROM mysql.user WHERE `create_user_priv` = 'Y' COLLATE utf8mb4_uca1400_ai_ci AND 'pma_test' LIKE `User` AND '' LIKE `Host` LIMIT 1", [['1']]);
|
||||
$dbiDummy->addResult('SELECT @@collation_server', [['utf8mb4_uca1400_ai_ci']]);
|
||||
// phpcs:ignore Generic.Files.LineLength.TooLong
|
||||
$dbiDummy->addResult('SHOW SESSION VARIABLES LIKE \'collation_connection\';', [['collation_connection', 'utf8mb4_uca1400_ai_ci']]);
|
||||
$dbiDummy->addResult("SELECT 1 FROM (SELECT `GRANTEE`, `IS_GRANTABLE` FROM `INFORMATION_SCHEMA`.`COLUMN_PRIVILEGES` UNION SELECT `GRANTEE`, `IS_GRANTABLE` FROM `INFORMATION_SCHEMA`.`TABLE_PRIVILEGES` UNION SELECT `GRANTEE`, `IS_GRANTABLE` FROM `INFORMATION_SCHEMA`.`SCHEMA_PRIVILEGES` UNION SELECT `GRANTEE`, `IS_GRANTABLE` FROM `INFORMATION_SCHEMA`.`USER_PRIVILEGES`) t WHERE `IS_GRANTABLE` = 'YES' AND '''pma_test''@''localhost''' LIKE `GRANTEE` UNION SELECT 1 FROM mysql.user WHERE `create_user_priv` = 'Y' COLLATE utf8mb4_uca1400_ai_ci AND 'pma_test' LIKE `User` AND '' LIKE `Host` LIMIT 1", [['1']]);
|
||||
// phpcs:enable
|
||||
$dbi = $this->createDatabaseInterface($dbiDummy);
|
||||
$GLOBALS['dbi'] = $dbi;
|
||||
|
||||
@ -62,6 +62,8 @@ class PrivilegesControllerTest extends AbstractTestCase
|
||||
$dbi
|
||||
))(['checkprivsdb' => $db]);
|
||||
|
||||
$dbiDummy->assertAllQueriesConsumed();
|
||||
|
||||
self::assertStringContainsString(Url::getCommon(['db' => $db], ''), $actual);
|
||||
|
||||
self::assertStringContainsString($db, $actual);
|
||||
|
||||
@ -40,12 +40,12 @@ class PrivilegesControllerTest extends AbstractTestCase
|
||||
$PMA_PHP_SELF = 'index.php';
|
||||
|
||||
$dbiDummy = $this->createDbiDummy();
|
||||
$dbiDummy->addResult('SELECT @@collation_server', [['utf8mb4_general_ci']]);
|
||||
// phpcs:ignore Generic.Files.LineLength.TooLong
|
||||
// phpcs:disable Generic.Files.LineLength.TooLong
|
||||
$dbiDummy->addResult('SHOW SESSION VARIABLES LIKE \'collation_connection\';', [['collation_connection', 'utf8mb4_general_ci']]);
|
||||
$dbiDummy->addResult("SELECT 1 FROM `INFORMATION_SCHEMA`.`USER_PRIVILEGES` WHERE `PRIVILEGE_TYPE` = 'CREATE USER' AND '''pma_test''@''localhost''' LIKE `GRANTEE` UNION SELECT 1 FROM mysql.user WHERE `create_user_priv` = 'Y' COLLATE utf8mb4_general_ci AND 'pma_test' LIKE `User` AND '' LIKE `Host` LIMIT 1", [['1']]);
|
||||
$dbiDummy->addResult('SELECT @@collation_server', [['utf8mb4_general_ci']]);
|
||||
// phpcs:ignore Generic.Files.LineLength.TooLong
|
||||
$dbiDummy->addResult('SHOW SESSION VARIABLES LIKE \'collation_connection\';', [['collation_connection', 'utf8mb4_general_ci']]);
|
||||
$dbiDummy->addResult("SELECT 1 FROM (SELECT `GRANTEE`, `IS_GRANTABLE` FROM `INFORMATION_SCHEMA`.`COLUMN_PRIVILEGES` UNION SELECT `GRANTEE`, `IS_GRANTABLE` FROM `INFORMATION_SCHEMA`.`TABLE_PRIVILEGES` UNION SELECT `GRANTEE`, `IS_GRANTABLE` FROM `INFORMATION_SCHEMA`.`SCHEMA_PRIVILEGES` UNION SELECT `GRANTEE`, `IS_GRANTABLE` FROM `INFORMATION_SCHEMA`.`USER_PRIVILEGES`) t WHERE `IS_GRANTABLE` = 'YES' AND '''pma_test''@''localhost''' LIKE `GRANTEE` UNION SELECT 1 FROM mysql.user WHERE `create_user_priv` = 'Y' COLLATE utf8mb4_general_ci AND 'pma_test' LIKE `User` AND '' LIKE `Host` LIMIT 1", [['1']]);
|
||||
// phpcs:enable
|
||||
$dbi = $this->createDatabaseInterface($dbiDummy);
|
||||
$GLOBALS['dbi'] = $dbi;
|
||||
|
||||
@ -64,6 +64,8 @@ class PrivilegesControllerTest extends AbstractTestCase
|
||||
$dbi
|
||||
))(['checkprivsdb' => $db, 'checkprivstable' => $table]);
|
||||
|
||||
$dbiDummy->assertAllQueriesConsumed();
|
||||
|
||||
self::assertStringContainsString($db . '.' . $table, $actual);
|
||||
|
||||
//validate 2: Url::getCommon
|
||||
|
||||
@ -581,6 +581,10 @@ class DbiDummy implements DbiExtension
|
||||
'query' => 'SELECT 1 FROM mysql.user LIMIT 1',
|
||||
'result' => [['1']],
|
||||
],
|
||||
[
|
||||
'query' => "SHOW SESSION VARIABLES LIKE 'collation_connection';",
|
||||
'result' => [['collation_connection', 'utf8_general_ci']],
|
||||
],
|
||||
[
|
||||
'query' => 'SELECT 1 FROM (SELECT `GRANTEE`, `IS_GRANTABLE`'
|
||||
. ' FROM `INFORMATION_SCHEMA`.`COLUMN_PRIVILEGES`'
|
||||
|
||||
Loading…
Reference in New Issue
Block a user