Одним из подходов, который охватывает большинство сценариев, является выполнение SQL с SET FMTONLY ON
, например
SET FMTONLY ON;
SELECT SomeField FROM ExampleQuery
От BOL, УСТАНОВИТЬ ТОЛЬКО :
Возвращает только метаданные клиенту.
Может использоваться для проверки формата
ответ без фактического запуска
Query.query.
Это приведет к ошибке, если запрос недействителен. Вы также можете проверить результат, чтобы определить, какой будет схема возвращаемого набора результатов (т. Е. Нет схемы = не оператор SELECT).
Обновление:
В общих чертах при работе с SQL, который вы хотите защитить от внедрения SQL, есть и другие вещи, о которых вам следует подумать:
- Избегайте динамического sql (объединение введенных пользователем значений в строку SQL для выполнения). Вместо этого используйте параметризованный SQL.
Инкапсулируйте запрос как вложенный запрос. например, * +1025 *
SELECT * FROM (ВЫБРАТЬ что-то из ADynamicQueryThatsBeenGenerated) x
Таким образом, если запрос содержит несколько команд, это приведет к ошибке. то есть это может привести к неверному запросу при инкапсуляции в виде вложенного запроса:
SELECT SomethingFrom FROM MyTable;TRUNCATE TABLE MyTable