2010-09-04 4 views
2

У меня есть БД MySQL с пользователем, который имеет доступ только к нескольким таблицам. Этот пользователь получил CREATE TEMPORARY TABLES для этой базы данных и, просмотрев журналы запросов, я вижу, как они создают временную таблицу, а затем сбой при попытке выбрать из нее. Выполнение GRANT SELECT ON TABLE 'db'.'tmp_tbl' TO 'user'@'localhost'; не работает, поскольку таблица не существует в этой точке.grant select for временная таблица в MySQL

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

В настоящее время, как представляется, выполняется работа, позволяющая предоставлять больше, чем просто «создавать» разрешения для временных таблиц, но пока не выполняется: 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 с радостью объединятся.

Смежные вопросы