我有一个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上授予所有特权。* TO' pu_sck6jDyB' @' localhost'。
MySQL version is 5.6.21
,Windows下运行的 XAMPP
。这是一个错误,还是我做错了什么?
更新:SHOW GRANTS for project@localhost;
GRANT INSERT,CREATE,DROP,RELOAD,INDEX,ALTER,SUPER,在
*.*
创建用户' project' @' localhost'通过密码识别' * [秘密]' WITH GRANT OPTION在
project
上授予所有特权。*到'项目' @' localhost'在
project\_%
上授予所有特权。*项目' @' localhost' WITH GRANT OPTION
答案 0 :(得分:0)
要授予权限,您必须具有GRANT_OPTION权限,并且还必须具有要授予的权限。在您的帖子中,您拥有以下权限:INSERT, CREATE, DROP, RELOAD, INDEX, ALTER, SUPER, CREATE USER
。
尝试仅授予您拥有的权限。我希望这会奏效。