MySQL授予访问权限拒绝


MySQL grant privileges access denial

我有一个Yii2项目,它操作一些数据库集。它有一个基本的数据库连接,我在其中保存用户的身份验证数据,第二个连接指向为每个用户自动创建的数据库。

我必须以编程方式创建数据库;因此,我有一个用户project,它在project'_%.*上具有全局授予权限和通配符权限。这就是我所做的:

    $queries = [
        "CREATE DATABASE ".$dbname,
        "FLUSH PRIVILEGES",
        "CREATE USER '{$dbuser}'@'localhost' IDENTIFIED BY '{$dbpass}'",
        "GRANT ALL PRIVILEGES ON {$dbname}.* TO '{$dbuser}'@'localhost'"
    ];
    foreach($queries as $q) $application->db->createCommand($q)->execute();

$dbname is 'project_'.randomString(8).

我仔细检查了所有的project权限,检查了mysqluserinformation_scheme也是,我有可授予的权限和授予选项,但仍然收到访问错误:

SQLSTATE[42000]:语法错误或访问冲突:1044拒绝用户"project"@"localhost"访问数据库"project_sck6jdyb"正在执行的SQL是:授予project_sck6jdyb.*"pu_sck6jdyb"@'localhost'的所有特权。

MySQL version is 5.6.21,在XAMPP、Windows下运行。这是个错误,还是我做错了什么?

更新:SHOW GRANTS for project@localhost;

GRANT INSERT、CREATE、DROP、RELOAD、INDEX、ALTER、SUPER、CREATE USER ON *.* TO'project'@'localhost'IDENTIFIED BY PASSWORD'*[secret]'WITH GRANT OPTION

授予project的所有特权。*授予"项目"@"本地主机"

授予project'_%上的所有特权。*授予"项目"@"本地主机"和授予选项

要授予权限,您必须具有grant_OPTION权限,而且还必须具有要授予的权限。在您的职位上,您拥有以下特权:INSERT, CREATE, DROP, RELOAD, INDEX, ALTER, SUPER, CREATE USER

尝试只授予您所拥有的特权。我希望这会奏效。