Существует ли лучший способ присвоить полномочия временным таблицам в MySQL?

Наши пользователи входят в производственную базу данных как пользователь довольно низкого уровня, с ВЫБОРОМ, предоставленным на уровне базы данных, и ВСТАВЛЯЮТ/ОБНОВЛЯЮТ/УДАЛЯЮТ предоставленный на определенных таблицах, к которым они нуждаются в доступе.

У них также есть полномочия составить временные таблицы (нам нужны они для некоторых более сложных запросов). Проблема состоит в том, что, пока они могут составить временные таблицы, у них нет доступа для ВСТАВКИ в них!

Обходное решение, которое мы нашли, должно создать "реальное" (персистентный?) таблица того же имени (но только с одним полем) и предоставляют доступ для них для вставки в это. Затем когда временная таблица будет составлена с тем же именем, система будет использовать это, не персистентную таблицу.

mysql> CREATE TEMPORARY TABLE `testing` (`id` INTEGER AUTO_INCREMENT PRIMARY KEY, `name` VARCHAR(30));
Query OK, 0 rows affected (0.04 sec)
mysql> INSERT INTO `testing` (`name`) VALUES ('testing');
ERROR 1142 (42000): INSERT command denied to user 'stduser'@'office.companyname.co.uk' for table 'testing'

При попытке предоставить доступ к таблице (на другой сессии, как корень), Вы не можете:

mysql> GRANT INSERT ON testdb.testing TO 'stduser'@'%';
ERROR 1146 (42S02): Table 'testdb.testing' doesn't exist

Таким образом, мой вопрос, в основном, можем мы предоставлять ВСТАВИТЬ/ОБНОВИТЬ/УДАЛИТЬ на временных таблицах, не имея "персистентной" таблицы того же бродящего вокруг имени?

5
задан OMG Ponies 29 June 2011 в 22:02
поделиться

3 ответа

Согласно справочнику MySQL :

MySQL позволяет вам предоставлять привилегии для баз данных или таблиц, которые не существуют. Для таблиц предоставляемые привилегии для должны включать привилегию CREATE .

Итак, попробуйте включить разрешение CREATE в оператор гранта выше.

5
ответ дан 13 December 2019 в 22:09
поделиться

Гранты MySQL не зависят от объекта, на самом деле существующего - вы можете предоставить доступ к таблицам, которые (пока) не существуют, и эти разрешения были бы назначены таблице, если бы она была создана. Это означает, что вы можете предоставить пользователю разрешение на создание определенной таблицы.

У меня возникнет соблазн создать базу данных только для временных таблиц (называемых, скажем, temp) и предоставить пользователям доступ к этой базе данных. Управлять разрешениями на основе базы данных намного проще, чем разрешениями для отдельных объектов.

1
ответ дан 13 December 2019 в 22:09
поделиться

Один из способов обойти это - создать специальную базу данных и предоставить пользователю доступ на запись к ней, а затем попросить его создать эти временные таблицы в этой специальной базе данных. .

4
ответ дан 13 December 2019 в 22:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: