我创建的用户 app_root 由具有有限权限的密码标识 . 此用户应该只能创建带前缀的数据库,创建新用户,并授予新用户访问数据库的权限 . 所以这就是我在做的事情 .

CREATE USER app_root@localhost IDENTIFIED BY 'password';
GRANT CREATE USER ON *.* TO app_root@localhost WITH GRANT OPTION;
GRANT CREATE ON `myapp\_%`.* TO app_root@localhost WITH GRANT OPTION; 
FLUSH PRIVILEGES;

用户正式创建 . 现在我用app_root用户登录mysql并执行以下命令:

CREATE DATABASE test;

它按预期失败,因为数据库名称不包含myapp_前缀 .

CREATE DATABASE myapp_test;
CREATE USER myapp_test@localhost IDENTIFIED BY 'ABC';

数据库和用户都已成功创建 . 但是如果我执行grant语句,则会发生错误 .

GRANT ALL PRIVILEGES ON myapp_test.* TO myapp_test@localhost;

它会生成 ERROR 1044 (42000): Access denied for user 'app_root'@'localhost' to database 'myapp_test' . 谁能告诉我我的做法有什么问题?

MySQL版本 - 服务器版本:5.5.37-0ubuntu0.14.04.1(Ubuntu)

编辑 - 按照建议,我将所有权限授予 app_root 用户 . 但它仍然没有改变任何东西 .

GRANT ALL ON `myapp\_%`.* TO app_root@localhost WITH GRANT OPTION;
FLUSH PRIVILEGES;