【问题标题】:grant select for temporary table in MySQL为 MySQL 中的临时表授予选择
【发布时间】:2010-09-04 23:30:42
【问题描述】:

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

The user comments on this page 建议使用 hack 来执行此操作,但我希望会有更好的方法。


使用它的代码是这样的:

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 sql temp-tables sql-grant


    【解决方案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 就会愉快地加入。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-06
      • 2019-12-18
      • 1970-01-01
      • 2013-07-15
      • 2014-08-10
      • 1970-01-01
      相关资源
      最近更新 更多