Запретить ОБНОВЛЕНИЕ mysql для этого сеанса

#php #mysql #mysqli

#php #mysql #mysqli

Вопрос:

У меня есть веб-хостинг, который не позволяет мне предоставлять привилегии пользователям. Итак, у меня есть только один полезный пользователь с привилегиями ВЫБОРА / ОБНОВЛЕНИЯ / УДАЛЕНИЯ.

Я подключаюсь к MySQL с помощью PHP MySQLi .

Есть ли способ сообщить MySQL (самой базе данных) или MySQLi (объекту PHP) запретить обновления / удаления только для текущего сеанса?

Цель состоит в том, чтобы иметь такой код:

 $mysqli = new mysqli(MYSQLI_IP, MYSQLI_USER, MYSQLI_PASSWORD,n MYSQLI_DBNAME);

// I have SELECT privileges so it works
$mysqli->query('SELECT * FROM `table`');

// This should work too because I have UPDATE privilege
$mysqli->query('UPDATE `table` SET `date`=NOW()');

// This is the "command" I'm looking for
$mysqli->disallowUpdates();

// Ok, it still works
$mysqli->query('SELECT * FROM `table`');

// This must not work because I told mysqli (php)/mysql (db)
// to disallow updates for this session
$mysqli->query('UPDATE `table` SET `date`=NULL');
 

Комментарии:

1. Примечание: у вас есть (случайная) n внутренняя (MYSQLI_IP, MYSQLI_USER, MYSQLI_PASSWORD,n MYSQLI_DBNAME) опечатка?

2. Определите «для текущего сеанса». Вы имеете в виду сеансы PHP?

3. Привилегии зависят от пользователя, а не от сеанса.

Ответ №1:

Вы не можете сделать это каким-либо образом, упомянутым. Вам нужно выполнить эту логику самостоятельно, например:

Разрешить или запретить при некоторых условиях:

 session_start();
$_SESSION['isAllowedToUpdate'] = false;
 

Делать обновления:

 if (isset($_SESSION['isAllowedToUpdate']) amp;amp; $_SESSION['isAllowedToUpdate']) {
  // do some updates
}
 

Комментарии:

1. Я думал об этом, но мне это немного не нравится, потому что в случае внедрения у меня не будет никакой защиты от введенного ОБНОВЛЕНИЯ. Но если другого пути нет, я буду придерживаться этого решения…

2. @Xenos Напишите код проверки на внедрение, т. Е. Используйте подготовленные инструкции с заполнителями.

3. @VMai Это будет только защита от внедрения для клиентов, а не для разработчиков: будет небезопасно, если (плохой) разработчик напишет UPDATE вместо SELECT , за исключением случаев, когда я создаю CustomMySQLi класс с разными select(...) update(...) методами и .