Skip to content

Commit 4891f2d

Browse files
committed
Merge branch 'QA_5_2'
Signed-off-by: Maurício Meneghini Fauth <mauricio@fauth.dev>
2 parents 5048544 + 4c1668d commit 4891f2d

9 files changed

Lines changed: 82 additions & 7 deletions

File tree

doc/config.rst

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2729,6 +2729,15 @@ Export and import settings
27292729

27302730
.. seealso:: :ref:`faq6_27`
27312731

2732+
.. config:option:: $cfg['Export']['remove_definer_from_definitions']
2733+
2734+
:type: boolean
2735+
:default: false
2736+
2737+
Remove DEFINER clause from the event, view and routine definitions.
2738+
2739+
.. versionadded:: 5.2.0
2740+
27322741
.. config:option:: $cfg['Import']
27332742
27342743
:type: array

libraries/classes/Config/Descriptions.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -703,6 +703,7 @@ private static function getNames(): array
703703
'Export_quick_export_onserver_name' => __('Save on server'),
704704
'Export_quick_export_onserver_overwrite_name' => __('Overwrite existing file(s)'),
705705
'Export_remember_file_template_name' => __('Remember filename template'),
706+
'Export_remove_definer_from_definitions_name' => __('Remove DEFINER clause from definitions'),
706707
'Export_sql_auto_increment_name' => __('Add AUTO_INCREMENT value'),
707708
'Export_sql_backquotes_name' => __('Enclose table and column names with backquotes'),
708709
'Export_sql_compatibility_name' => __('SQL compatibility mode'),

libraries/classes/Config/Settings/Export.php

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -469,6 +469,9 @@ final class Export
469469
*/
470470
public $yaml_structure_or_data;
471471

472+
/** @var bool */
473+
public $remove_definer_from_definitions;
474+
472475
/**
473476
* @param array<int|string, mixed> $export
474477
*/
@@ -582,6 +585,7 @@ public function __construct(array $export = [])
582585
$this->xml_export_views = $this->setXmlExportViews($export);
583586
$this->xml_export_contents = $this->setXmlExportContents($export);
584587
$this->yaml_structure_or_data = $this->setYamlStructureOrData($export);
588+
$this->remove_definer_from_definitions = $this->setRemoveDefinerClause($export);
585589
}
586590

587591
/**
@@ -2008,4 +2012,16 @@ private function setYamlStructureOrData(array $export): string
20082012

20092013
return $export['yaml_structure_or_data'];
20102014
}
2015+
2016+
/**
2017+
* @param array<int|string, mixed> $export
2018+
*/
2019+
private function setRemoveDefinerClause(array $export): bool
2020+
{
2021+
if (! isset($export['remove_definer_from_definitions'])) {
2022+
return false;
2023+
}
2024+
2025+
return (bool) $export['remove_definer_from_definitions'];
2026+
}
20112027
}

libraries/classes/Plugins/AuthenticationPlugin.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
use PhpMyAdmin\Template;
1818
use PhpMyAdmin\TwoFactor;
1919
use PhpMyAdmin\Url;
20+
use PhpMyAdmin\Util;
2021

2122
use function __;
2223
use function array_keys;
@@ -257,6 +258,8 @@ public function authenticate(): void
257258
$this->storeCredentials();
258259
/* Check allow/deny rules */
259260
$this->checkRules();
261+
/* clear user cache */
262+
Util::clearUserCache();
260263
}
261264

262265
/**

libraries/classes/Plugins/Export/ExportSql.php

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -561,6 +561,14 @@ protected function exportRoutineSQL(
561561
'',
562562
$flag
563563
);
564+
if (! empty($createQuery) && $GLOBALS['cfg']['Export']['remove_definer_from_definitions']) {
565+
// Remove definer clause from routine definitions
566+
$parser = new Parser($createQuery);
567+
$statement = $parser->statements[0];
568+
$statement->options->remove('DEFINER');
569+
$createQuery = $statement->build();
570+
}
571+
564572
// One warning per database
565573
if ($flag) {
566574
$usedAlias = true;
@@ -1003,8 +1011,16 @@ public function exportEvents($db): bool
10031011
. $delimiter . $GLOBALS['crlf'];
10041012
}
10051013

1006-
$text .= $GLOBALS['dbi']->getDefinition($db, 'EVENT', $eventName)
1007-
. $delimiter . $GLOBALS['crlf'] . $GLOBALS['crlf'];
1014+
$eventDef = $GLOBALS['dbi']->getDefinition($db, 'EVENT', $eventName);
1015+
if (! empty($eventDef) && $GLOBALS['cfg']['Export']['remove_definer_from_definitions']) {
1016+
// remove definer clause from the event definition
1017+
$parser = new Parser($eventDef);
1018+
$statement = $parser->statements[0];
1019+
$statement->options->remove('DEFINER');
1020+
$eventDef = $statement->build();
1021+
}
1022+
1023+
$text .= $eventDef . $delimiter . $GLOBALS['crlf'] . $GLOBALS['crlf'];
10081024
}
10091025

10101026
$text .= 'DELIMITER ;' . $GLOBALS['crlf'];
@@ -1544,7 +1560,10 @@ public function getTableDef(
15441560
$statement = $parser->statements[0];
15451561

15461562
// exclude definition of current user
1547-
if (isset($GLOBALS['sql_view_current_user'])) {
1563+
if (
1564+
$GLOBALS['cfg']['Export']['remove_definer_from_definitions']
1565+
|| isset($GLOBALS['sql_view_current_user'])
1566+
) {
15481567
$statement->options->remove('DEFINER');
15491568
}
15501569

libraries/classes/Util.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1214,6 +1214,7 @@ public static function clearUserCache(): void
12141214
SessionCache::remove('is_superuser');
12151215
SessionCache::remove('is_createuser');
12161216
SessionCache::remove('is_grantuser');
1217+
SessionCache::remove('mysql_cur_user');
12171218
}
12181219

12191220
/**

libraries/config.default.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1856,6 +1856,11 @@
18561856
*/
18571857
$cfg['Export']['json_unicode'] = true;
18581858

1859+
/**
1860+
* @global string $cfg['Export']['remove_definer_from_definitions']
1861+
*/
1862+
$cfg['Export']['remove_definer_from_definitions'] = false;
1863+
18591864
/**
18601865
* @global string $cfg['Export']['sql_structure_or_data']
18611866
*/

psalm-baseline.xml

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9894,6 +9894,11 @@
98949894
<code>$GLOBALS['asfile']</code>
98959895
<code>$GLOBALS['sql_if_not_exists']</code>
98969896
</InvalidArgument>
9897+
<InvalidArrayOffset occurrences="3">
9898+
<code>$GLOBALS['cfg']['Export']</code>
9899+
<code>$GLOBALS['cfg']['Export']</code>
9900+
<code>$GLOBALS['cfg']['Export']</code>
9901+
</InvalidArrayOffset>
98979902
<MixedArgument occurrences="50">
98989903
<code>$GLOBALS['sql_auto_increments']</code>
98999904
<code>$GLOBALS['sql_auto_increments']</code>
@@ -9953,7 +9958,10 @@
99539958
<code>$indexes</code>
99549959
<code>$indexesFulltext</code>
99559960
</MixedArgumentTypeCoercion>
9956-
<MixedArrayAccess occurrences="11">
9961+
<MixedArrayAccess occurrences="14">
9962+
<code>$GLOBALS['cfg']['Export']['remove_definer_from_definitions']</code>
9963+
<code>$GLOBALS['cfg']['Export']['remove_definer_from_definitions']</code>
9964+
<code>$GLOBALS['cfg']['Export']['remove_definer_from_definitions']</code>
99579965
<code>$aliases[$oldDatabase]['tables']</code>
99589966
<code>$columnAliases[$column['name']]</code>
99599967
<code>$definition['Type']</code>
@@ -10078,7 +10086,7 @@
1007810086
<code>$GLOBALS['crlf']</code>
1007910087
<code>$GLOBALS['crlf']</code>
1008010088
<code>$GLOBALS['crlf']</code>
10081-
<code>$GLOBALS['dbi']-&gt;getDefinition($db, 'EVENT', $eventName)</code>
10089+
<code>$eventDef</code>
1008210090
</PossiblyNullOperand>
1008310091
<PropertyTypeCoercion occurrences="1">
1008410092
<code>$field-&gt;key-&gt;columns</code>
@@ -16636,15 +16644,18 @@
1663616644
</TypeDoesNotContainType>
1663716645
</file>
1663816646
<file src="test/classes/UtilTest.php">
16639-
<MixedArgument occurrences="2">
16647+
<MixedArgument occurrences="3">
16648+
<code>$_SESSION['cache']['server_server']</code>
1664016649
<code>$_SESSION['cache']['server_server']</code>
1664116650
<code>$result[0]</code>
1664216651
</MixedArgument>
1664316652
<MixedArgumentTypeCoercion occurrences="2">
1664416653
<code>$keyword</code>
1664516654
<code>$keyword</code>
1664616655
</MixedArgumentTypeCoercion>
16647-
<MixedArrayAccess occurrences="2">
16656+
<MixedArrayAccess occurrences="4">
16657+
<code>$_SESSION['cache']['server_server']</code>
16658+
<code>$_SESSION['cache']['server_server']</code>
1664816659
<code>$_SESSION['cache']['server_server']</code>
1664916660
<code>$_SESSION['cache']['server_server']</code>
1665016661
</MixedArrayAccess>

test/classes/UtilTest.php

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -328,8 +328,18 @@ public function testClearUserCache(): void
328328
SessionCache::set('is_superuser', 'yes');
329329
$this->assertEquals('yes', $_SESSION['cache']['server_server']['is_superuser']);
330330

331+
SessionCache::set('mysql_cur_user', 'mysql');
332+
$this->assertEquals(
333+
'mysql',
334+
$_SESSION['cache']['server_server']['mysql_cur_user']
335+
);
336+
331337
Util::clearUserCache();
332338
$this->assertArrayNotHasKey('is_superuser', $_SESSION['cache']['server_server']);
339+
$this->assertArrayNotHasKey(
340+
'mysql_cur_user',
341+
$_SESSION['cache']['server_server']
342+
);
333343
}
334344

335345
/**

0 commit comments

Comments
 (0)