#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(...)
методами и .