代码之家  ›  专栏  ›  技术社区  ›  BCS

MySQL中临时表的grant select

  •  2
  • BCS  · 技术社区  · 14 年前

    我有一个MySQL数据库,用户只能访问几个表。此用户已被授予 CREATE TEMPORARY TABLES 对于这个数据库,通过观察查询日志,我可以看到它们创建了一个临时表,然后在尝试从中进行选择时失败。做 GRANT SELECT ON TABLE 'db'.'tmp_tbl' TO 'user'@'localhost'; 不起作用,因为此时表不存在。

    The user comments on this page


    CREATE TEMPORARY TABLE t1 SELECT id FROM real1 LIMIT 10;
    CREATE TEMPORARY TABLE t2 SELECT id FROM real2 LIMIT 10;
    
    SELECT * FROM t1;
    SELECT * FROM t2;
    SELECT * FROM t1 JOIN t2 JOIN real3 AS r ON t1.id = r.a AND t2.id = r.b;
    

    在这种情况下,关键是数据(或至少部分数据)是活动的。
    我需要前两个查询的结果和第三个查询中连接的值相同,这样子查询就不起作用了。

    1 回复  |  直到 13 年前
        1
  •  1
  •   Marc B    14 年前

    似乎正在进行允许授予临时表的“创建”权限的工作,但似乎尚未完成: http://bugs.mysql.com/bug.php?id=27480 .

    tmp 解决方案中的桌面技巧,您可以:

    SELECT tmp.t1.a, tmp.t2.b, realdb.real3.c FROM tmp.t1
           ^^^       ^^^       ^^^^^^
    JOIN tmp.t2 ON  tmp.t1.somefield=tmp.t2.otherfield
         ^^^        ^^^              ^^^
    JOIN realdb.real3 ON tmp.t2.yetanotherifeld = realdb.real3.yetanotherotherfield
         ^^^^^^          ^^^                      ^^^^^^
    etc...
    

    只要确保在查询中指定数据库(如示例中的^^^^所示),MySQL就会很高兴地加入。