我有一个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用户'项目'@'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 * . ''project'@'localhost'通过密码识别' [secret]'WITH GRANT OPTION授予所有项目特权 . * TO 'project'@'localhost'在项目上授予所有特权\ _% . *'''''''''''''''''''''''''''''''''''''''''''''''