Подтвердить что ты не робот

Лексинг частичный SQL в С#

Мне нужно будет разбирать частичные SQL-запросы (это для инструмента аудита SQL-инъекций). Например

'1' AND 1=1--

Должен разбиться на токены, например

[0] => [SQL_STRING, '1']
[1] => [SQL_AND]
[2] => [SQL_INT, 1]
[3] => [SQL_AND]
[4] => [SQL_INT, 1]
[5] => [SQL_COMMENT]
[6] => [SQL_QUERY_END]

Являются ли они любыми, по крайней мере, лексерами для SQL, которые я использую для себя или какие-либо хорошие инструменты, такие как bison для С# (хотя я бы предпочел не писать собственную грамматику, поскольку мне нужно поддерживать большинство, если не всю грамматику MySQL 5 )

4b9b3361

Ответ 1

Кажется, там есть несколько хороших парсеров.

В этой статье SO есть образец с использованием MS Entity Framework:
Анализ кода SQL на С#

Кажется, кто-то другой свернул их и выставил на Code Project:
http://www.codeproject.com/KB/dotnet/SQL_parser.aspx

Лично я бы пошел с решением Entity Framework, так как он был создан и поддерживается MS, но также, вероятно, тесно связан с SQL Server. Поскольку вы смотрите на MySQL, вы можете захотеть пойти с настраиваемым решением в Code Project, так как я уверен, что вы можете запрограммировать больше пользовательских решений, как того требует грамматика.

Я буду использовать это в ближайшее время (для Oracle, а не для MySQL), поэтому, пожалуйста, сообщите сообществу, как это работает!

ОБНОВЛЕНИЕ:
Я только что вернулся к этому и прочитал комментарии... после дальнейшего размышления я бы рекомендовал ANTLR, поскольку он поддерживает несколько грамматик. Еще раз, я не использовал его, поэтому будет хорошо слышать, как он работает, и решать вам.
https://stackoverflow.com/questions/76083/parsing-sql-in-net/76151

Ответ 2

Также может быть какой-то способ использования полностью проанализированного (Microsoft) T-SQL через выпуски баз данных Visual Studio -

Корона драгоценных камней в базе данных Издание - это синтаксические анализаторы SQL и script, эти две части образуют основу того, что система баз данных внутри.

http://blogs.msdn.com/b/gertd/archive/2008/08/21/getting-to-the-crown-jewels.aspx