使用一个命令授予多个数据库

grant to multiple db using one command

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

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

而且我想创建新用户 USER 可以 SELECT 数据库具有 apple 前缀。 所以我使用下面的多个命令将 SELECT 授予新用户 USER to.

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 语句的通配符 (%)?

真正的问题是拥有数以千计的数据库。你可能会因为拥有这么多而放慢速度。 (这是一个 OS 问题,因为 MySQL 通过目录实例化每个数据库。)

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

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

因为这是在 google 搜索中出现的,所以我最终做了一个 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> 以上唯一的问题是您的密码在命令历史记录中。

希望这对寻求解决方案的人有所帮助。