Я пытаюсь создать учетную запись пользователя mysql во время выполнения в PHP7.0, предоставил доступ к одной базе данных, также созданной во время выполнения.В настоящее время я использую:
$this->mysqli = new mysqli('localhost', $admin_account, $password);
$setup = [
/* create database */
sprintf('CREATE DATABASE IF NOT EXISTS %s;', $dbName),
/* grant admin */
sprintf("GRANT ALL PRIVILEGES ON %s.* TO '%s'@'%s' WITH GRANT OPTION;", $dbName, $admin_account, $admins_remote_ip),
/* add user */
sprintf("CREATE USER '%s'@'localhost' IDENTIFIED BY '%s';", $dbUsername, $dbPassword),
/* THIS WAS ADDED AS A FIX TO NO AVAIL */
sprintf("UPDATE mysql.user SET password=PASSWORD('%s') WHERE user='%s'", $dbPassword, $dbUsername),
/* grant retailer*/
sprintf("GRANT ALL PRIVILEGES ON %s.* TO '%s'@'localhost';", $dbName, $dbUsername),
/* flush */
"FLUSH PRIVILEGES;",
];
foreach ($setup as $query) {
if (false == $this->mysqli->query($query)) {
$error = $this->mysqli->error;
return $error;
}
}
Все операторы выполняются без ошибок, все выглядит так, как должно, однако пользователь без прав администратора получает ошибку mysql->; 1004 *
Соединение не удалось: доступ запрещен для пользователя 'dbUsername' @ 'localhost' (используется пароль: ДА)
Если я это сделаю;
> mysql -u admin_account -p
update mysql.user set password=PASSWORD('dbPassword') where user='dbUsername';
Тогда соединениеработает и все хорошо.Пожалуйста, помогите.
* edit: я удалил поведение транзакций, удаление его из живого кода не решило проблему.Похоже, что строка пароля изменяется где-то между PHP и MySQL?