使用一个命令授予多个db

时间:2015-06-24 05:33:23

标签: mysql mariadb database-administration grant

我有许多mariaDB个具有相同前缀的数据库。如

apple1
apple2
apple3
....
apple5000
apple5001
banana1
banana2
...
banana100

我希望创建新用户USER谁可以SELECT个数据库具有apple前缀。 因此,我使用下面的多个命令将SELECT授予新用户USER

GRANT SELECT ON `apple1` TO 'USER'@'%';
GRANT SELECT ON `apple2` TO 'USER'@'%';
GRANT SELECT ON `apple3` TO 'USER'@'%';
...
GRANT SELECT ON `apple5001` TO 'USER'@'%';

是否有任何解决方案授予多个数据库使用%语句的通配符(LIKE)之类的命令指定前缀?

3 个答案:

答案 0 :(得分:2)

GRANT SELECT ON `apple%`.* TO 'USER'@'192.168.0.227';

答案 1 :(得分:0)

真正的问题是拥有数千个数据库。有这么多人,你可能会减慢速度。 (这是一个操作系统问题,因为MySQL通过目录实例化每个数据库。)

编写存储过程以查询information_schema以发现所有数据库(使用LIKE)并生成(使用SELECT ... CONCAT)所需的GRANT语句。然后手动将该输出复制到mysql命令行工具中以执行它们。

答案 2 :(得分:0)

当这出现在谷歌搜索中时,我最终做了一个for循环并将其管道传送到mysql中:

for i in var1 var2 var3 ; do echo "grant all on db_$i.* to user@host;" | mysql ; done

如果使用数字,则for i in 1..1000 如果您在mycnf文件中没有登录详细信息,并且必须登录到mysql mysql -u user -password <Password> 上面的唯一问题是您的密码在命令历史记录中。

希望这可以帮助任何寻求解决方案的人。