0

我有一个 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权限,检查了mysql. user而且information_scheme,我也有可授予的权限和授予选项,但仍然出现访问错误:

SQLSTATE [42000]:语法错误或访问冲突:1044 用户'project'@'localhost' 拒绝访问数据库'project_sck6jdyb' 正在执行的SQL 是:GRANT ALL PRIVILEGES ON project_sck6jdyb.* TO 'pu_sck6jDyB'@'localhost'。

MySQL version is 5.6.21XAMPP, 在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 选项

将 .* 上的所有权限授予project'project'@'localhost'

GRANT ALL PRIVILEGES ON project\_%.* TO 'project'@'localhost' WITH GRANT OPTION

4

1 回答 1

0

要授予权限,您必须具有 GRANT_OPTION 权限,并且您还必须具有要授予的权限。从您的帖子中,您拥有以下权限:INSERT, CREATE, DROP, RELOAD, INDEX, ALTER, SUPER, CREATE USER.

尝试仅授予您拥有的权限。我希望这会奏效。

于 2015-12-10T16:43:22.203 回答