【问题标题】:Granting all permissions to mysql schemas that start with a specific set of characters授予以特定字符集开头的 mysql 模式的所有权限
【发布时间】:2021-04-01 19:13:43
【问题描述】:

我正在尝试授予以特定字符集开头的任何 SCHEMA 的 CRUD 权限。我正在使用 MySQL 8.x 进行此操作

这是我尝试执行的示例查询:

GRANT SELECT,INSERT,UPDATE,DELETE ON 'tc4_%'.* TO specific_user;

我希望任何前缀为 tc4_ 的 Schema 都具有 CRUD 权限。这些模式尚未创建,因此我无法在创建它们之前显式分配权限。

任何想法如何让它工作?

【问题讨论】:

    标签: mysql ddl


    【解决方案1】:

    您必须在创建架构之后授予对每个架构中的表的权限。而且,您不能使用 LIKE 样式的通配符。

    此 SQL 将生成一个结果集,其中包含应用通配符的 GRANT 操作。

    SELECT CONCAT(
           'GRANT SELECT,INSERT,UPDATE,DELETE ON ', 
            SCHEMA_NAME, 
            '.* TO ''username''@''hostname'';') cmd
      FROM information_schema.SCHEMATA
     WHERE SCHEMA_NAME LIKE 'te%'
    UNION ALL SELECT 'FLUSH PRIVILEGES;' cmd   /* this line is optional */
    

    【讨论】:

    • 很好的答案,但在 GRANT 之后应该没有必要 FLUSH PRIVILEGES。刷新权限没有害处,但只有当您使用 INSERT/UPDATE/DELETE 直接写入系统表时才需要它。 GRANT/REVOKE 应该隐式处理。
    猜你喜欢
    • 1970-01-01
    • 2020-11-22
    • 1970-01-01
    • 2011-06-28
    • 2016-08-10
    • 1970-01-01
    • 2020-10-23
    相关资源
    最近更新 更多