【问题标题】:grant to multiple db using one command使用一个命令授予多个数据库
【发布时间】:2015-06-24 05:33:23
【问题描述】:

我有许多具有相同前缀的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 语句的通配符(%)之类的命令指定前缀?

【问题讨论】:

    标签: mysql mariadb database-administration sql-grant


    【解决方案1】:
    GRANT SELECT ON `apple%`.* TO 'USER'@'192.168.0.227';
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 2011-03-13
          • 1970-01-01
          • 2020-09-14
          • 2021-02-12
          • 2012-11-13
          • 1970-01-01
          • 2020-10-12
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多