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# 用の bison のような優れたツールはありますか (ただし、MySQL 5 のすべてではないにしてもほとんどの文法をサポートする必要があるため、独自の文法を作成したくありません)。

4

2 に答える 2

2

そこにはいくつかの優れたパーサーがあるようです。

この SO 記事には、MS の Entity Framework:
Parsing SQL code in C#を使用したサンプルがあります。

他の誰かが自分でロールバックしてコード プロジェクトに投稿したようです:
http://www.codeproject.com/KB/dotnet/SQL_parser.aspx

個人的には、MS によって作成および保守されている Entity Framework ソリューションを使用しますが、おそらく SQL Server と密接に結びついています。MySQL を見ているので、Code Project のカスタム ソリューションを使用することをお勧めします。これにより、文法が必要とするカスタム ソリューションをさらにコーディングできると確信しています。

私はすぐにこれを使用します (MySQL ではなく Oracle 用です)。コミュニティにソリューションがどのように機能するかを知らせてください!

更新
私はこれに戻ってコメントを読んだところです...さらに考えてみると、複数の文法をサポートしているため、ANTLRを本当にお勧めします。繰り返しますが、私はそれを使用していないので、それがどのように機能したかを聞くのは良いことです.
https://stackoverflow.com/questions/76083/parsing-sql-in-net/76151

于 2010-06-04T00:58:09.803 に答える
1

また、Visual Studio のデータベース エディションを介して (Microsoft によって) 完全に解析された T-SQL を利用する方法があるかもしれません -

Database Edition 製品の最も重要な機能は、SQL パーサーとスクリプト ジェネレーターです。これら 2 つの部分は、データベース プロジェクト システムが内部で行う処理の基盤を形成します。

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

于 2011-03-17T14:18:19.527 に答える