isso não é um problema de direitos. O mysql não suporta variáveis como nomes de objetos (onde os objetos são tabelas, bancos de dados, colunas, etc.). você terá que usar instruções preparadas e construir seu comando como uma string. veja link
por exemplo, suas instruções PREPARE precisam se parecer com:
PREPARE stmt1 FROM concat("CREATE DATABASE ", @dbname);
PREPARE stmt2 FROM concat("GRANT ALL ON newdb.* TO ", @username);
não que isso NÃO seja seguro para injeção. Certifique-se de ter limpado seus "parâmetros" (nome do banco de dados, nome de usuário) antes de usar estas instruções.
também, você está concedendo seu privilégio errado. TO '@newdbuser'
atribui o privilégio aos usuários que se conectam de um computador chamado newdbuser
. você precisa colocar o sinal @
após o nome de usuário.