MySQL 中 CREATE 授权中的通配符

dr_*_*dr_ 6 mysql permissions

MySQL允许使用通配符数据库的名称,以允许用户在操作上的数据库的一个子集只:

GRANT ALL PRIVILEGES ON `foobar%`.* TO 'user'@'%' IDENTIFIED BY 'somepassword';
Run Code Online (Sandbox Code Playgroud)

有没有办法做同样的CREATE批,允许(参见上面的例子)user创建唯一的名字开始与数据库foobar

否则说:CREATE 授予是全局的(即允许具有此权限的用户创建任何数据库,而没有限制)还是可以以某种方式受到限制?

小智 9

是的。只需添加 CREATE 权限:

GRANT CREATE ON `foobar%`.* TO 'foobaruser'@'%' IDENTIFIED BY 'foobarpass';
Run Code Online (Sandbox Code Playgroud)

只需测试一下:

foobaruser$ mysql
mysql> create database `foobar_one`;
Query OK, 1 row affected (0.00 sec)

mysql> create database `barfoo_one`;
ERROR 1044 (42000): Access denied for user 'foobaruser'@'localhost' to database 'barfoo_one'
Run Code Online (Sandbox Code Playgroud)

请注意,您需要对_(下划线)进行转义,因为它one character在模式中的作用类似。所以 «`foobar_`» 将匹配foobar1or foobarZ