为TEMP表授予权限(由存储过程动态创建)

时间:2014-09-05 06:47:35

标签: mysql stored-procedures google-cloud-sql

  1. 列表项最初是由存储过程创建的 TEMP表,它执行一些操作
  2. 由上述SP创建了这几个TEMP表。
  3. 我想为 TEMP表的某些 SQL用户授予 SELECT 权限,这些 TEMP表是由上述动态创建的SP的
  4. 对于上述请求,我尝试从 ROOT用户进行以下查询,以获得具有前缀temp的表的权限

    GRANT ALL PRIVILEGES ON  dbname .`Temp%` TO  'TEST'@'%' WITH GRANT OPTION;
    

    但是,用户'TEST'的上述权限仍然无法选择这些TEMP表并且下面的错误:

      

    SELECT表命令拒绝用户'TEST'@'localhost'   'temp_ccdata_20140904101131_2'

    请有人建议是否有可能为存储过程创建的动态表授予SELECT访问权限

    感谢提前

1 个答案:

答案 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

然后,您可以使用这些执行这些查询来实现您寻求的权限更改。它可能不是最优雅但可以完成工作。此外,您可能希望将名称包装在后面的刻度中以考虑空格等。