ユーザーがかなり柔軟な基準でデータベースを照会できるようにしたいと考えています。次のものを使用できます。
String slqCmdTxt = "SELECT * FROM TheTable WHERE " + userExpression;
ただし、これが SQL インジェクションに対して広く開かれていることはわかっています。パラメータを使用するのは良いことですが、非常に柔軟なクエリを許可する方法がわかりません。
SQL インジェクションに心を開かずに柔軟なデータベース クエリを許可するにはどうすればよいですか?
詳細:
実際には、マスターと属性を持つセカンダリの 2 つのテーブルがあります。1 つのマスタ レコードに多くの属性が含まれる場合があります。両方のテーブルの値に対してクエリを実行します。結果は、単純なテーブル ビューよりも読みやすいレポートに処理されます。データは C# プログラムによって書き込まれますが、現在の方向性は、Java で記述されたコンポーネントからテーブルをクエリすることです。
そのため、ユーザー入力を提供して安全にクエリを作成する方法が必要です。限られた一連の入力に対して、指定された入力とパラメーター値を使用してクエリ文字列を作成するコードを作成しました。次に、入力値をパラメーターとして追加します。これにより、複雑な文字列のカチネーションが発生し、変更/拡張が困難になります。
Javaで作業しているので、いくつかの検索により、jOOQのようなSQLステートメント構築ライブラリが見つかりました...