Вам необходимо указать пароль.
$dbh->do("GRANT ALL ON $db_name.* TO $db_user\@$host IDENTIFIED BY '$db_pass'");
^ ^
Хотя, конечно, подготовленные операторы / параметры были бы намного лучше (если бы MySQL разрешил их здесь, в этом я не уверен на 100%).
Вы должны также заключить в кавычки $db_user
и $host
(опять же, при условии, что параметры не работают).
Если параметры работают:
$dbh->do(q{GRANT ALL ON ?.* TO ?@? IDENTIFIED BY ?}, {}, $db_name, $db_user, $host, $db_pass);
Я вполне уверен, что параметры будут работать с паролем и, вероятно, также с пользователем и хостом. Имя базы данных, я не уверен в этом. Возможно, вам просто нужно вставить это в quote_identifier
.
edit: Вы должны просто ударить линию CREATE USER
полностью. Предоставление разрешений создаст пользователь (и с паролем).