11

我需要解析部分 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 词法分析器或任何好的工具,如用于 C# 的野牛(尽管我宁愿不编写自己的语法,因为我需要支持 MySQL 5 的大部分语法,如果不是全部的话)

4

2 回答 2

2

似乎那里有一些很好的解析器。

这篇 SO 文章有一个使用 MS 实体框架的示例:
Parsing SQL code in C#

似乎其他人自己推出了代码项目: http:
//www.codeproject.com/KB/dotnet/SQL_parser.aspx

就个人而言,我会选择实体框架解决方案,因为它是由 MS 创建和维护的,但它也可能与 SQL Server 紧密耦合。由于您正在查看 MySQL,因此您可能希望使用 Code Project 上的自定义解决方案,因为我确信您可以按照语法要求在更多自定义解决方案中进行编码。

我很快就会使用它(用于 Oracle,而不是 MySQL),所以请让社区知道解决方案是如何工作的!

更新
我刚刚回到这个并阅读了评论......经过进一步思考,我真的推荐 ANTLR,因为它支持多种语法。再一次,我没有使用它,所以很高兴听到它是如何工作的,这由你来决定。
https://stackoverflow.com/questions/76083/parsing-sql-in-net/76151

于 2010-06-04T00:58:09.803 回答
1

也可能有一些方法可以通过 Visual Studio 的数据库版本使用完全解析的(由 Microsoft)T-SQL -

数据库版产品的皇冠上的宝石是 SQL 解析器和脚本生成器,这两部分构成了数据库项目系统内部工作的基础。

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

于 2011-03-17T14:18:19.527 回答