Skip to content

Commit 3c19f78

Browse files
authored
Merge pull request #8 from jmrenouard/fix-mysql8-password-function
Fix PASSWORD() function error on MySQL 8+
2 parents ae3bbd9 + 1bd2474 commit 3c19f78

File tree

1 file changed

+44
-44
lines changed

1 file changed

+44
-44
lines changed

mysqltuner.pl

Lines changed: 44 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -2253,10 +2253,6 @@ sub security_recommendations {
22532253
subheaderprint "Security Recommendations";
22542254

22552255
infoprint "$myvar{'version_comment'} - $myvar{'version'}";
2256-
if ( mysql_version_ge(8.0) ) {
2257-
infoprint "Skipped due to unsupported feature for MySQL 8.0+";
2258-
return;
2259-
}
22602256

22612257
#exit 0;
22622258
if ( $opt{skippassword} eq 1 ) {
@@ -2377,15 +2373,17 @@ sub security_recommendations {
23772373
}
23782374

23792375
# Looking for User with user/ uppercase /capitalise user as password
2380-
@mysqlstatlist = select_array
2376+
if ( !mysql_version_ge(8) ) {
2377+
@mysqlstatlist = select_array
23812378
"SELECT CONCAT(QUOTE(user), '\@', QUOTE(host)) FROM mysql.user WHERE user != '' AND (CAST($PASS_COLUMN_NAME as Binary) = PASSWORD(user) OR CAST($PASS_COLUMN_NAME as Binary) = PASSWORD(UPPER(user)) OR CAST($PASS_COLUMN_NAME as Binary) = PASSWORD(CONCAT(UPPER(LEFT(User, 1)), SUBSTRING(User, 2, LENGTH(User)))))";
2382-
if (@mysqlstatlist) {
2383-
foreach my $line ( sort @mysqlstatlist ) {
2384-
chomp($line);
2385-
badprint "User " . $line . " has user name as password.";
2386-
push( @generalrec,
2379+
if (@mysqlstatlist) {
2380+
foreach my $line ( sort @mysqlstatlist ) {
2381+
chomp($line);
2382+
badprint "User " . $line . " has user name as password.";
2383+
push( @generalrec,
23872384
"Set up a Secure Password for $line user: SET PASSWORD FOR $line = PASSWORD('secure_password');"
2388-
);
2385+
);
2386+
}
23892387
}
23902388
}
23912389

@@ -2419,44 +2417,46 @@ sub security_recommendations {
24192417
my $nbins = 0;
24202418
my $passreq;
24212419
if (@passwords) {
2422-
my $nbInterPass = 0;
2423-
foreach my $pass (@passwords) {
2424-
$nbInterPass++;
2425-
2426-
$pass =~ s/\s//g;
2427-
$pass =~ s/\'/\\\'/g;
2428-
chomp($pass);
2429-
2430-
# Looking for User with user/ uppercase /capitalise weak password
2431-
@mysqlstatlist =
2432-
select_array
2420+
if ( !mysql_version_ge(8) ) {
2421+
my $nbInterPass = 0;
2422+
foreach my $pass (@passwords) {
2423+
$nbInterPass++;
2424+
2425+
$pass =~ s/\s//g;
2426+
$pass =~ s/\'/\\\'/g;
2427+
chomp($pass);
2428+
2429+
# Looking for User with user/ uppercase /capitalise weak password
2430+
@mysqlstatlist =
2431+
select_array
24332432
"SELECT CONCAT(user, '\@', host) FROM mysql.user WHERE $PASS_COLUMN_NAME = PASSWORD('"
2434-
. $pass
2435-
. "') OR $PASS_COLUMN_NAME = PASSWORD(UPPER('"
2436-
. $pass
2437-
. "')) OR $PASS_COLUMN_NAME = PASSWORD(CONCAT(UPPER(LEFT('"
2438-
. $pass
2439-
. "', 1)), SUBSTRING('"
2440-
. $pass
2441-
. "', 2, LENGTH('"
2442-
. $pass . "'))))";
2443-
debugprint "There are " . scalar(@mysqlstatlist) . " items.";
2444-
if (@mysqlstatlist) {
2445-
foreach my $line (@mysqlstatlist) {
2446-
chomp($line);
2447-
badprint "User '" . $line
2448-
. "' is using weak password: $pass in a lower, upper or capitalize derivative version.";
2433+
. $pass
2434+
. "') OR $PASS_COLUMN_NAME = PASSWORD(UPPER('"
2435+
. $pass
2436+
. "')) OR $PASS_COLUMN_NAME = PASSWORD(CONCAT(UPPER(LEFT('"
2437+
. $pass
2438+
. "', 1)), SUBSTRING('"
2439+
. $pass
2440+
. "', 2, LENGTH('"
2441+
. $pass . "'))))";
2442+
debugprint "There are " . scalar(@mysqlstatlist) . " items.";
2443+
if (@mysqlstatlist) {
2444+
foreach my $line (@mysqlstatlist) {
2445+
chomp($line);
2446+
badprint "User '" . $line
2447+
. "' is using weak password: $pass in a lower, upper or capitalize derivative version.";
24492448

2450-
push( @generalrec,
2449+
push( @generalrec,
24512450
"Set up a Secure Password for $line user: SET PASSWORD FOR '"
2452-
. ( split /@/, $line )[0] . "'\@'"
2453-
. ( split /@/, $line )[1]
2454-
. "' = PASSWORD('secure_password');" );
2455-
$nbins++;
2451+
. ( split /@/, $line )[0] . "'\@'"
2452+
. ( split /@/, $line )[1]
2453+
. "' = PASSWORD('secure_password');" );
2454+
$nbins++;
2455+
}
24562456
}
2457+
debugprint "$nbInterPass / " . scalar(@passwords)
2458+
if ( $nbInterPass % 1000 == 0 );
24572459
}
2458-
debugprint "$nbInterPass / " . scalar(@passwords)
2459-
if ( $nbInterPass % 1000 == 0 );
24602460
}
24612461
}
24622462
if ( $nbins > 0 ) {

0 commit comments

Comments
 (0)