Оглавление:
- Проверка структуры базы данных
- Попробуйте запросы в тестовой базе данных
- Запросы двойной проверки, содержащие объединения
- Тройные проверки запросов с подзапросами
- Суммируйте данные с помощью GROUP BY
- Наблюдать ограничения предложения GROUP BY
- Используйте круглые скобки с символами AND, OR и NOT
- Права на управление поиском
- Регулярно создавайте резервные копии своих баз данных
- Грамотно обрабатывать условия ошибки
Видео: SQL-инъекция. Оборона и нападение (часть 1) 2025
Оператор SQL SELECT - это инструмент для поиска скрытой информации в базе данных. Даже если у вас есть четкое представление о том, что вы хотите получить, перевод этой идеи в SQL может стать проблемой. Если ваша формулировка немного не работает, вы можете получить неправильные результаты. Чтобы уменьшить ваши шансы быть введенными в заблуждение, используйте следующие десять принципов.
Проверка структуры базы данных
Если вы извлекаете данные из базы данных и ваши результаты не выглядят разумными, проверьте дизайн базы данных. Многие плохо разработанные базы данных используются, и если вы работаете с ними, исправьте дизайн, прежде чем пытаться использовать какое-либо другое средство. Помните - хороший дизайн является предпосылкой целостности данных.
Попробуйте запросы в тестовой базе данных
Создайте тестовую базу данных, имеющую ту же структуру, что и ваша производственная база данных, но с несколькими репрезентативными строками в таблицах. Выберите данные, чтобы вы знали заранее, какими должны быть результаты ваших запросов.
Запустите каждый тестовый запрос по тестовым данным и посмотрите, соответствуют ли результаты вашим ожиданиям. Если это не так, вам может потребоваться переформулировать ваши запросы. Если запрос правильно сформулирован, но вы все равно получаете плохие результаты, вам может потребоваться реструктурировать вашу базу данных.
Создайте несколько наборов тестовых данных и обязательно включите нечетные случаи, такие как пустые таблицы и экстремальные значения в самом пределе допустимых диапазонов. Попытайтесь придумать маловероятные сценарии и проверить правильное поведение, когда они происходят. В ходе проверки маловероятных случаев вы можете получить представление о проблемах, которые чаще всего происходят.
Запросы двойной проверки, содержащие объединения
Соединения, как известно, противоречат друг другу. Если ваш запрос содержит один, убедитесь, что он делает то, что вы ожидаете, прежде чем добавлять предложения WHERE или другие усложняющие факторы.
Тройные проверки запросов с подзапросами
Запросы с подвыборками берут данные из одной таблицы и, в зависимости от того, что извлекается, берут некоторые данные из другой таблицы. Поэтому, по определению, такие запросы действительно могут быть труднодоступными. Убедитесь, что данные, которые внутренний SELECT извлекает, являются данными, которые внешний SELECT должен получить для получения желаемого результата. Если у вас есть два или более уровней подзапросов, вам нужно быть еще более осторожными.
Суммируйте данные с помощью GROUP BY
Скажите, что у вас есть таблица (NATIONAL), которая содержит имя (Player), команду (Team) и количество домашних бегов (Homers) каждого игрока в бейсбол в Национальной лиге, Вы можете получить общее количество игроков в команде для всех команд с таким запросом:
SELECT Team, SUM (Homers) FROM NATIONAL GROUP BY Team;
В этом запросе отображается каждая команда, за которой следует общее количество домашних запусков, пораженных всеми игроками этой команды.
Наблюдать ограничения предложения GROUP BY
Предположим, что вам нужен список нападающих Национальной лиги. Рассмотрим следующий запрос:
SELECT Player, Team, Homers FROM NATIONAL WHERE Homers> = 20 GROUP BY Team;
В большинстве реализаций этот запрос возвращает ошибку. Как правило, в списке выбора могут отображаться только столбцы, используемые для группировки или столбцы, используемые в заданной функции. Однако, если вы хотите просмотреть эти данные, будет работать следующая формулировка:
SELECT Player, Team, Homers FROM NATIONAL WHERE Homers> = 20 GROUP BY Team, Player, Homers;
Поскольку все столбцы, которые вы хотите отобразить, отображаются в предложении GROUP BY, запрос выполняется успешно и предоставляет желаемые результаты. Эта формулировка сортирует полученный список сначала Командой, затем Игроком и, наконец, Гомерсом.
Используйте круглые скобки с символами AND, OR и NOT
Иногда, когда вы смешиваете AND и OR, SQL не обрабатывает выражение в ожидаемом порядке. Используйте круглые скобки в сложных выражениях, чтобы убедиться, что вы получите желаемые результаты. Ввод нескольких дополнительных нажатий клавиш - небольшая цена, чтобы заплатить за лучшие результаты.
Круглые скобки также помогают гарантировать, что ключевое слово NOT применяется к термину или выражению, к которому вы хотите применить.
Права на управление поиском
Многие люди не используют функции безопасности, доступные в их СУБД. Они не хотят беспокоиться о них, потому что считают, что неправильное использование и незаконное присвоение данных - это вещи, которые происходят только с другими людьми. Не ждите, чтобы сожгли. Устанавливать и поддерживать безопасность для всех баз данных, имеющих любую ценность.
Регулярно создавайте резервные копии своих баз данных
Предупреждение о недоподготовке: данные не могут быть восстановлены после перенапряжения, пожара, землетрясения или какой-либо другой опасности, которая уничтожает ваш жесткий диск. (Помните, иногда компьютеры просто умирают без уважительной причины.) Делайте частые резервные копии и помещайте резервный носитель в безопасное место.
Что представляет собой безопасное место, зависит от того, насколько важны ваши данные. Это может быть пожаробезопасный сейф в той же комнате, что и ваш компьютер. Это может быть в другом здании. Это может быть в облаке. Это может быть в конкретном бункере под горой, которая была ожесточена, чтобы противостоять ядерной атаке. Определите, какой уровень безопасности подходит для ваших данных.
Грамотно обрабатывать условия ошибки
Выполняете ли вы специальные запросы с рабочей станции или внедряете запросы в приложение, иногда SQL возвращает сообщение об ошибке, а не желаемые результаты. На рабочей станции вы можете решить, что делать дальше, на основе возвращенного сообщения.
В приложении ситуация отличается. Пользователь приложения, вероятно, не знает, какое действие подходит. Положите обширную обработку ошибок в свои приложения, чтобы охватить все возможные ошибки, которые могут возникнуть. Создание кода обработки ошибок требует больших усилий, но это лучше, чем когда пользователь смотрит на замороженный экран.