对于上述请求,我尝试从 ROOT用户进行以下查询,以获得具有前缀temp的表的权限
GRANT ALL PRIVILEGES ON dbname .`Temp%` TO 'TEST'@'%' WITH GRANT OPTION;
但是,用户'TEST'的上述权限仍然无法选择这些TEMP表并且下面的错误:
SELECT表命令拒绝用户'TEST'@'localhost' 'temp_ccdata_20140904101131_2'
请有人建议是否有可能为存储过程创建的动态表授予SELECT访问权限
感谢提前
答案 0 :(得分:0)
如@wchiquito所述,指定数据库名称时允许_
和%
wilcards。在GRANT
查询的表名中使用通配符的可能解决方法如下:
SELECT CONCAT('GRANT SELECT ON dbname.', TABLE_NAME, ' TO user;')
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'dbname' AND TABLE_NAME LIKE 'prefix%';
将dbname
替换为exampledb
,将user
替换为tony42
,将prefix
替换为foo_
,则应返回以下查询:
GRANT SELECT ON exampledb.foo_usertable TO tony42
然后,您可以使用这些执行这些查询来实现您寻求的权限更改。它可能不是最优雅但可以完成工作。此外,您可能希望将名称包装在后面的刻度中以考虑空格等。