为MySQL中的临时表授予select权限

为MySQL中的临时表授予select权限,mysql,sql,temp-tables,grant,Mysql,Sql,Temp Tables,Grant,我有一个MySQL数据库,用户只能访问几个表。该用户已被授予为该数据库创建临时表的权限,通过查看查询日志,我可以看到他们创建了一个临时表,然后在尝试从中进行选择时失败。正在将表'db.'tmp_tbl'上的SELECT授予'user'@'localhost'不起作用,因为此时表不存在 建议一个黑客来做这件事,但我本以为会有一个更好的方法 使用此代码的代码大致如下: CREATE TEMPORARY TABLE t1 SELECT id FROM real1 LIMIT 10; CREATE T

我有一个MySQL数据库,用户只能访问几个表。该用户已被授予为该数据库创建临时表的权限,通过查看查询日志,我可以看到他们创建了一个临时表,然后在尝试从中进行选择时失败。正在
将表'db.'tmp_tbl'上的SELECT授予'user'@'localhost'不起作用,因为此时表不存在

建议一个黑客来做这件事,但我本以为会有一个更好的方法


使用此代码的代码大致如下:

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;
在这种情况下,关键在于数据(或至少部分数据)是活动的。

我需要前两个查询的结果和第三个查询中联接的值相同,因此使用子查询将不起作用。

似乎正在进行工作,以允许为临时表授予不仅仅是“创建”权限的权限,但似乎尚未完成:

您链接到的手册页中提到的解决方法也适用于您。您可以在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就会很高兴地加入