Можно ли предоставлять права на вставку, обновление и удаление только для временных таблиц с MySQL?

У меня есть пользователь, который имеет только SELECT а также CREATE TEMPORARY TABLES привилегии для подчиненной базы данных, чтобы гарантировать, что ведомое устройство не получит изменения таблиц вне репликации, однако без возможности INSERT (а также UPDATE а также DELETE) на любых временных таблицах, которые создаются CREATE TEMPORARY TABLES привилегия довольно бесполезна.

Можно ли предоставить эти привилегии, но только для временных таблиц?

Я использую MySQL 5.5

РЕДАКТИРОВАТЬ: я использую PHP и PDO для запуска команд. Возможно, есть проблема с сессией, основанная на ответе @ phreakv6

РЕДАКТИРОВАТЬ 2: мой полный тестовый код:

<?php
$dbh=new PDO("mysql:host=localhost;dbname=scratch;charset=utf8", 'readonly', 'readonlytestingonlypassword',array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));

$prepped=$dbh->prepare("CREATE TEMPORARY TABLE `TempPermissionsTest` (`ID` INT( 11 ) NOT NULL ,`TestVal` INT( 11 ) NOT NULL )");
$prepped->execute();
$err=$prepped->errorInfo();
if ($err[0]>0) print $err[1]." : ".$err[2];

$prepped=$dbh->prepare("INSERT INTO `TempPermissionsTest` (`ID` ,`TestVal`) VALUES (1,3)");
$prepped->execute();
$err=$prepped->errorInfo();
if ($err[0]>0) print $err[1]." : ".$err[2];

$prepped=$dbh->prepare("SELECT * FROM `TempPermissionsTest`");
$prepped->execute();
$err=$prepped->errorInfo();
if ($err[0]>0) print $err[1]." : ".$err[2];

while ($row=$prepped->fetch(PDO::FETCH_ASSOC)) {
print_r($row);
}
?>

Запуск этого на пользователя, который имеет только SELECT а также CREATE TEMPORARY TABLES привилегии приводят к следующему выводу:

1142 : INSERT command denied to user 'readonly'@'localhost' for table 'TempPermissionsTest'

1

Решение

После того, как сеанс создал временную таблицу, сервер не выполняет дальнейшие проверки привилегий для таблицы. Сеанс создания может выполнять любую операцию над таблицей, такую ​​как DROP TABLE, INSERT, UPDATE или SELECT.

Выглядит твой CREATE TEMPORARY TABLES привилегия должна дать вам INSERT, UPDATE а также DELETE привилегии на вашей временной таблице для сеанса, который ее создал. Разве это не то, что вы ищете?

Я только что заметил вашу версию MySQL. Для MySQL 5.5 я думаю, что вам не повезло. Пожалуйста, посмотрите на эта ошибка. CREATE TEMPORARY TABLES привилегия была расширена, чтобы включить INSERT, UPDATE а также DELETE только пост 5.6.

3

Другие решения

Дополнить принятый ответ более общей информацией на тот случай, если люди найдут этот вопрос в других БД.

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

В PostgreSQL временные таблицы изначально принадлежат создателю, у которого есть полные права доступа к ним. Владелец может отозвать разрешения и даже теоретически отозвать право владения, хотя я не знаю ни одного приложения, которое фактически делает это.

Я ожидал бы, что каждая другая (или даже если есть исключения, почти любая другая) СУБД на планете эффективно по умолчанию разрешений временной таблицы на полные разрешения для пользователя, который их создает. Невыполнение этого требования может серьезно ограничить использование этой функции.

0

По вопросам рекламы [email protected]