diff --git a/server/plugins-available/mysql_clientdb_plugin.inc.php b/server/plugins-available/mysql_clientdb_plugin.inc.php
index f8763b0a8634b53d4b69eaf69c3a079466c0ce38..804bdbaa749992f84b81564d181e969b764d24e5 100644
--- a/server/plugins-available/mysql_clientdb_plugin.inc.php
+++ b/server/plugins-available/mysql_clientdb_plugin.inc.php
@@ -686,8 +686,26 @@ class mysql_clientdb_plugin {
 			}
 
 			if($data['new']['database_password'] != $data['old']['database_password'] && $data['new']['database_password'] != '') {
-				$link->query("SET PASSWORD FOR '".$link->escape_string($data['new']['database_user'])."'@'$db_host' = '".$link->escape_string($data['new']['database_password'])."';");
-				$app->log('Changing MySQL user password for: '.$data['new']['database_user'].'@'.$db_host, LOGLEVEL_DEBUG);
+				$result = $app->db->queryOneRecord("SELECT VERSION() as version");
+				$dbversion = $result['version'];
+
+				// mariadb or mysql < 5.7
+				if(stripos($dbversion, 'mariadb') !== false || version_compare($dbversion, '5.7', '<')) {
+					$query = sprintf("SET PASSWORD FOR '%s'@'%s' = '%s'",
+						$link->escape_string($data['new']['database_user']),
+						$db_host,
+						$link->escape_string($data['new']['database_password']));
+					$link->query($query);
+				}
+				// mysql >= 5.7
+				else {
+					$query = sprintf("ALTER USER IF EXISTS '%s'@'%s' IDENTIFIED WITH mysql_native_password AS '%s'",
+						$link->escape_string($data['new']['database_user']),
+						$db_host,
+						$link->escape_string($data['new']['database_password']));
+					$link->query($query);
+				}
+				$app->log('Changing MySQL user password for: ' . $data['new']['database_user'] . '@' . $db_host, LOGLEVEL_DEBUG);
 			}
 		}