Эксплуатация SQL Server

Безопасный динамический SQL с sp_executesql

Динамический SQL полезен для необязательных фильтров и разных форм запроса, но конкатенация создает риск injection, ошибки кавычек, плохое повторное использование планов и сложную диагностику.

Безопасный динамический SQL с sp_executesql

Динамический SQL полезен для необязательных фильтров и разных форм запроса, но конкатенация создает риск injection, ошибки кавычек, плохое повторное использование планов и сложную диагностику.

Что измерять

Проверьте, как значения попадают в оператор, ограничены ли идентификаторы, точно ли совпадают типы параметров и сколько разных планов создает текст.

Практический подход

Передавайте значения параметрами sp_executesql, разрешайте только известные идентификаторы и применяйте QUOTENAME, сохраняйте текст стабильным для одной формы и логируйте шаблон отдельно от значений.

Чего следует избегать

Не объединяйте пользовательский ввод со строкой, не считайте QUOTENAME защитой произвольных значений и не объявляйте все строки как nvarchar(max).

Эксплуатационный результат

Динамический SQL безопасен и поддерживаем, когда структура контролируется, а данные параметризованы.

Проверка перед production

Зафиксируйте исходные показатели и определите ожидаемое улучшение. Проверьте решение на репрезентативных данных и при реальной параллельной нагрузке. Сохраните исходную настройку или план, подготовьте откат и наблюдайте следующий обычный пик нагрузки.

Чтобы применить этот подход к конкретной среде SQL Server, используйте форму ниже и укажите версию SQL Server, размер базы, профиль нагрузки и уже собранные данные.

Вопрос по статье

Есть вопрос по этой теме?

Расскажите, что вы оцениваете или с какой проблемой столкнулись. Мы ответим с практической рекомендацией.

Inquiries are not enabled in this preview.

Задать вопрос по этой статье