Хотя все, похоже, считают атаки с использованием SQL-инъекций большой уязвимостью в безопасности, на мой взгляд, это не самая большая дыра в безопасности, вызванная динамическим SQL. Вы можете предотвратить атаки с использованием SQL-инъекций, если правильно кодируете интерфейс и без правильного кодирования хранимых процедур вы все равно можете оставить себя уязвимым.
Я думаю, что самая большая дыра в безопасности при использовании динамического SQL заключается в том, что теперь пользовательский интерфейс должен иметь доступ к базовым таблицам. Это означает, что есть пользователь, будь то Windows Authentication или SQL Login, который может испортить базу данных почти без правил, чтобы остановить их. Я даже не могу сосчитать, сколько раз я заходил в новый магазин и обнаружил, что информация для входа в систему была сохранена в файле конфигурации где-то в виде простого текста. Даже когда это не так, разработчики почти всегда знали имя пользователя и пароль для учетной записи.
Большинство нарушений безопасности (по длинному выстрелу) в корпорациях связаны с работой: недовольные сотрудники, люди, которые хотят быстро заработать, продавая SSN, или люди, которые просто не думают, что что-то не так с поиском медицинской информации для своих сотрудников. бывшая девушка из средней школы. Добавьте к этому разработчика, который выпустил «TRUNCATE TABLE», когда он был уверен , что он был на сервере разработки. Кроме того, у вас есть люди, которые входят в систему и добавляют строку в таблицу где-то, чтобы «исправить» проблему, но они не понимают, что всякий раз, когда вы добавляете строку в таблицу X, вам нужно записать строку в таблицу Y. Если бы весь доступ был обеспечен через хранимые процедуры, они бы не смогли этого сделать.