Есть ли утилита для поиска операторов SQL в нескольких файлах и перечисления любых ссылочных таблиц и хранимых процедур - PullRequest
1 голос
/ 06 января 2010

В настоящее время я смотрю на ужасное унаследованное приложение ColdFusion, написанное с очень небольшим количеством хранимых процедур и множеством неприятных встроенных операторов SQL (у него тоже очень плохая база данных).

Кто-нибудь знает какое-либо приложение, которое можно использовать для поиска в файлах приложения, выбирая какие-либо операторы SQL и перечисляя таблицы / хранимые процедуры, на которые имеются ссылки?

Ответы [ 3 ]

3 голосов
/ 06 января 2010

Dreamweaver позволит вам искать код всего сайта. Если сайт настроен правильно, включая пароль RDS и источник данных, он может рассказать вам много информации. Я настроил его только один раз, поэтому я не могу точно вспомнить, какую информацию он вам дает, я думаю, может быть, просто структуру БД. Окно приложения> базы данных. Даже если он не настроен должным образом, просто поиск «cfquery» быстро найдет все ваши запросы.

Вы также можете написать сценарий CF с использованием CFDirectory / CFFile для зацикливания файлов .cfm и анализа всего между тегами cfquery и / cfquery.

CFBuilder может иметь некоторые подобные функции, но я еще не знаком с ним.

edit Я слышал, что CFBuilder не может найти все ваши cfqueries, у которых нет cfqueryparam, но вы можете использовать CF для расширения CFB. Я думаю, вы могли бы найти / написать что-нибудь для CFB, чтобы помочь вам с вашей проблемой.

другое редактирование

Я знаю, что он не индексирует содержимое запроса, но вы также можете использовать регулярные выражения для поиска с помощью редактора. при поиске <cfquery.+(select|insert|update|delete) проверка поля регулярных выражений должна найти запросы, которые не используют cfstoredProc (обязательно снимите флажок с варианта совпадения, если он есть). Я знаю, что Dreamweaver и Eclipse могут искать Regex.

НТН

2 голосов
/ 06 января 2010

Как уже упоминалось выше, я бы попробовал grep с регулярным выражением в поисках

"<cfquery*" "</cfquery>" and "<cfstoredproc*" "</cfstoredproc>"

Кроме того, если у вас есть тесты с хорошим охватом кода или вы просто чувствуете, что приложение полностью запущено, вы можете попробовать включить «Журналы вызовов базы данных» в Admin -> Источники данных или даже на уровне драйвера JDBC, просто следите за производительностью, чтобы убедиться, что это не замедляет работу сайта неприемлемо.

1 голос
/ 06 января 2010

Короче говоря: нет. Вы должны сделать много хитрого разбора, чтобы убедиться, что вы получите весь SQL. И поскольку вы можете объединить SQL из множества строк, вы почти всегда пропустите его.

Лучшее, что вы, вероятно, сделаете, это нечувствительный к регистру grep для «SELECT | INSERT | UPDATE | DELETE», а затем вручную извлекающий имена таблиц.

В зависимости от того, как структурирован код, вы можете получить имена таблиц путем регулярного выражения SQL из предложения. Но это не надежно. Многие люди используют конкатенацию строк для построения операторов SQL. Это плохо, потому что может вводить атаки с использованием SQL-инъекций, а также усложняет эту конкретную проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...