在MySQL中为临时表授予select

时间:2010-09-04 23:30:42

标签: mysql sql temp-tables grant

我有一个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 个答案:

答案 0 :(得分:1)

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

您链接到的手册页中提到的变通方法也适用于您。您可以在MySQL中跨数据库加入,因此假设您从变通方法中执行了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就会愉快地加入。