diff --git a/lib/Froxlor/Database/Manager/DbManagerMySQL.php b/lib/Froxlor/Database/Manager/DbManagerMySQL.php index b194631f..bf2f01ca 100644 --- a/lib/Froxlor/Database/Manager/DbManagerMySQL.php +++ b/lib/Froxlor/Database/Manager/DbManagerMySQL.php @@ -78,48 +78,35 @@ class DbManagerMySQL public function grantPrivilegesTo($username = null, $password = null, $access_host = null, $p_encrypted = false, $update = false) { if (! $update) { - // mysql8 compatibility - if (version_compare(Database::getAttribute(\PDO::ATTR_SERVER_VERSION), '8.0.11', '>=')) { - // create user - if ($p_encrypted) { + // create user + if ($p_encrypted) { + if (version_compare(Database::getAttribute(\PDO::ATTR_SERVER_VERSION), '5.7.0', '<')) { + $stmt = Database::prepare(" + CREATE USER '" . $username . "'@'" . $access_host . "' IDENTIFIED BY PASSWORD :password + "); + } else { $stmt = Database::prepare(" CREATE USER '" . $username . "'@'" . $access_host . "' IDENTIFIED WITH mysql_native_password AS :password "); - } else { - $stmt = Database::prepare(" - CREATE USER '" . $username . "'@'" . $access_host . "' IDENTIFIED BY :password - "); } - Database::pexecute($stmt, array( - "password" => $password - )); - // grant privileges - $stmt = Database::prepare(" - GRANT ALL ON `" . $username . "`.* TO :username@:host - "); - Database::pexecute($stmt, array( - "username" => $username, - "host" => $access_host - )); } else { - // grant privileges - if ($p_encrypted) { - $stmt = Database::prepare(" - GRANT ALL PRIVILEGES ON `" . $username . "`.* TO :username@:host IDENTIFIED WITH mysql_native_password AS :password - "); - } else { - $stmt = Database::prepare(" - GRANT ALL PRIVILEGES ON `" . $username . "`.* TO :username@:host IDENTIFIED BY :password - "); - } - Database::pexecute($stmt, array( - "username" => $username, - "host" => $access_host, - "password" => $password - )); + $stmt = Database::prepare(" + CREATE USER '" . $username . "'@'" . $access_host . "' IDENTIFIED BY :password + "); } + Database::pexecute($stmt, array( + "password" => $password + )); + // grant privileges + $stmt = Database::prepare(" + GRANT ALL ON `" . $username . "`.* TO :username@:host + "); + Database::pexecute($stmt, array( + "username" => $username, + "host" => $access_host + )); } else { - // set passoword + // set password if (version_compare(Database::getAttribute(\PDO::ATTR_SERVER_VERSION), '5.7.6', '<')) { if ($p_encrypted) { $stmt = Database::prepare("SET PASSWORD FOR :username@:host = :password"); @@ -174,7 +161,6 @@ class DbManagerMySQL ), false); } - $drop_stmt = Database::prepare("DROP DATABASE IF EXISTS `" . $dbname . "`"); Database::pexecute($drop_stmt); } diff --git a/tests/Mysqls/MysqlsTest.php b/tests/Mysqls/MysqlsTest.php index 6bd4d300..1cbab615 100644 --- a/tests/Mysqls/MysqlsTest.php +++ b/tests/Mysqls/MysqlsTest.php @@ -183,13 +183,21 @@ class MysqlsTest extends TestCase $this->assertNotEmpty($data['password'], 'No password for user "' . $user . '"'); } + if (TRAVIS_CI == 0) { + // just to be sure, not required for travis as the vm is fresh every time + Database::needRoot(true); + Database::query("DROP USER IF EXISTS froxlor010@10.0.0.10;"); + } + // grant privileges to another host $testdata = $users['froxlor010']; $dbm->getManager()->grantPrivilegesTo('froxlor010', $testdata['password'], '10.0.0.10', true); // select all entries from mysql.user for froxlor010 to compare password-hashes $sel_stmt = Database::prepare("SELECT * FROM mysql.user WHERE `User` = :usr"); - Database::pexecute($sel_stmt, ['usr' => 'froxlor010']); + Database::pexecute($sel_stmt, [ + 'usr' => 'froxlor010' + ]); $results = $sel_stmt->fetchAll(\PDO::FETCH_ASSOC); foreach ($results as $user) { $passwd = $user['Password'] ?? $user['authentication_string'];