Задать вопрос
@NikSan3452

Способ безопасного выполнения sql — запросов от пользователей?

Я пишу веб приложение на Fastapi, которое бы позволило пользователям выполнять сырые sql - запросы к БД. Это учебное приложение для тренировки sql.
Суть такова: есть html - страница с редактором кода Ace editor, где пользователь пишет свой код. Далее я получаю этот код и отправляю на сервер. По функциональности я хочу получить что-то похожее на SQL Fiddle. Я понимаю, что просто так выполнять рандомный пользовательский код - не есть хорошо и мне нужно, как-то его обработать либо изолировать. Собственно в этом и вопрос:
существует ли способ сделать такие запросы безопасными для БД ? Я искал информацию по этому вопросу, но ничего годного не нашел.
Есть идея, создавать для каждого пользователя сеанс, в котором будет создана отдельная копия БД, с различными ограничениями, доступная только этому пользователю, а после завершения работы удалять сеанс вместе с БД, будет ли такой подход разумным с точки зрения производительности? Объем данных для учебных таблиц небольшой.
  • Вопрос задан
  • 247 просмотров
Подписаться 3 Простой Комментировать
Решения вопроса 1
shabelski89
@shabelski89
engineer
Да, нужно изолировать, например с помощью контейнеров- докер.
Вот пример готово решения, далее делаете к нему свою обвязку, чтобы для каждого пользователя запускался свой контейнер.
Вопрос нагрузки/ресурсов отдельный вопрос.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 4
Vindicar
@Vindicar
RTFM!
будет ли такой подход разумным с точки зрения производительности

Он будет разумным с точки зрения безопасности и лёгкости исправления ошибок пользователя.
Производительность, имхо, должна быть на втором месте в таких вещах.
Ответ написан
Комментировать
@Vitsliputsli
выполнять сырые sql

Любая СУБД предоставляет широкое управление доступом, поэтому вполне можно этим вопользоваться. Если учебные таблицы нужно только читать, то можно держать их в одном месте, ограничив доступ только на чтение. Т.к. менять данные они будут только свои, то лочить друг друга не смогут. Также надо посмотреть лимиты для кол-во данных, которые пользователи могут залить в БД. Лимитировать кол-во создаваемых БД.
Несмотря на все, разумеется, лучше весь этот зоопарк держать на отдельной СУБД.
Можно, конечно, сделать это и через контейнеры. Но такая изоляция здесь не особо нужна, а накладные расходы будут очень велики, если у вас не 2 пользователя.
Ответ написан
Комментировать
LaRN
@LaRN
Senior Developer
А обязательно БД должна быть на сервере?
БД может встраиваемая на стороне клиента, например SQLLight.
SQLLight можно использовать и на стороне сервера у каждого пользователя будет своя БД.
Ответ написан
Комментировать
@Sat0shi
ИБ
ORM
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
22 дек. 2024, в 20:40
10000 руб./за проект
22 дек. 2024, в 20:34
3000 руб./за проект
22 дек. 2024, в 20:12
10000 руб./за проект