Я работаю над приложением, которое предоставляет пользователю возможность определить SQL-запрос и запустить его в базе данных. Единственная цель запроса - создать набор данных, который будет использоваться для создания отчета. Поскольку это общая база данных (что означает большое количество учетных записей с таблицами для каждой учетной записи), безопасность очень важна.Ограничить пользовательский запрос T-SQL только для типа SELECT
Я ищу лучший способ проверить, что поставляемый запрос имеет только тип SELECT - это означает, что пользователь не может запустить DELETE, UPDATE и т. Д. Конечно, проверка должна быть на стороне сервера. Проект написан на C#.
Первой проверкой является проверка того, что запрос начинается с SELECT, но этого недостаточно из-за подзапросов. Я думал проверить, содержит ли строка запроса (C#) некоторые зарезервированные слова, такие как EXEC, DELETE, UPDATE, INSERT.
Есть ли способы «взломать» эту проверку (используя & nbsp или другие символы)? Какие зарезервированные слова должны быть заблокированы? Любые другие мысли или идеи?
Большое спасибо за ваше время!
Если безопасность очень важна, не делайте этого. Подумайте о другом подходе! – Kaf
Вы хотите разрешить использование определенных пользователем функций? Можете ли вы достичь желаемого уровня безопасности, ограничив доступ, то есть только предоставляя доступ для чтения к данным, которые пользователь должен уметь видеть? – HABO
@Kaf нет никакого другого подхода для реализации требования (по крайней мере, я не вижу) – Vlad