首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >授予MySQL中临时表的选择

授予MySQL中临时表的选择
EN

Stack Overflow用户
提问于 2010-09-04 23:30:42
回答 1查看 3.1K关注 0票数 2

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

此页面上的用户注释建议进行黑客攻击,但我本以为会有一种更好的方法。

使用它的代码大致如下:

代码语言:javascript
复制
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;

在这种情况下,关键是数据(或至少部分数据)是活动的。

我需要前两个查询的结果和第三个连接的值是相同的,这样使用子查询就不能工作了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-09-05 08:13:30

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

您链接到的手册页中提到的解决方法也适用于您。您可以在MySQL中跨数据库连接,因此假设您完成了解决方案中的tmp表技巧,您可以这样做:

代码语言:javascript
复制
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将愉快地连接起来。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3644382

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档