我正在使用表前缀方法,以使多个客户端使用同一数据库。每个客户端创建的表数约为55。除了可以通过手动列出表格来进行所有授予之外,我还可以执行以下操作吗?
GRANT SELECT,INSERT,UPDATE,DELETE ON database.prefix_* TO 'username'@'localhost' IDENTIFIED BY 'password';
预告:这不是我的答案。我在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_%
我自己尝试了一下,效果很好。