一尘不染

在具有特定前缀的多个表上授予特权

mysql

我正在使用表前缀方法,以使多个客户端使用同一数据库。每个客户端创建的表数约为55。除了可以通过手动列出表格来进行所有授予之外,我还可以执行以下操作吗?

GRANT SELECT,INSERT,UPDATE,DELETE ON database.prefix_* TO 'username'@'localhost' IDENTIFIED BY 'password';

阅读 265

收藏
2020-05-17

共1个答案

一尘不染

预告:这不是我的答案。我在http://lists.mysql.com/mysql/202610上找到了它,并且为了简单起见将其复制并粘贴到了Stephen
Cook

您可以使用INFORMATION_SCHEMA.TABLES视图为您生成GRANT语句。按照以下方式编写查询:

SELECT   CONCAT('GRANT SELECT ON test.', TABLE_NAME, ' to ''foouser'';')
FROM     INFORMATION_SCHEMA.TABLES
WHERE    TABLE_SCHEMA = 'test'
      AND TABLE_NAME LIKE 'foo_%'

然后运行它,复制结果,然后将这些结果作为查询或脚本运行。您当然可以为此疯狂,例如,如果您对许多用户这样做,可能会编写一个存储过程,该过程使用用户名的参数,因此可以在需要时用作工具。

这不是您要求的语法,但这是一个不错的技巧。

-

将表模式“ test”替换为数据库名称。foo_%可以替换为适当的prefix_%

我自己尝试了一下,效果很好。

2020-05-17