Предоставить выбор для временной таблицы в MySQL - PullRequest
2 голосов
/ 05 сентября 2010

У меня есть MySQL DB с пользователем, который имеет доступ только к нескольким таблицам.Этому пользователю было предоставлено CREATE TEMPORARY TABLES для этой базы данных, и, просматривая журналы запросов, я вижу, как они создают временную таблицу, а затем отказывают при попытке выбрать из нее.Выполнение GRANT SELECT ON TABLE 'db'.'tmp_tbl' TO '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;

В этом случае, весь смысл в том, что данные (или, по крайней мере, некоторые изон) является живым.
Мне нужны результаты первых двух запросов, и значения для объединения в третьем должны быть одинаковыми, поэтому использование подзапросов не будет работать.

1 Ответ

1 голос
/ 05 сентября 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...