私が持っているサイトの 1 つで、開発者向けに data.stackexchange.com のような SQL コンソールを提供する予定です。問題は、すべてのタイプの SQL を実行させることができないことです。そのため、いくつかの制限があります。制約の例を次に示します。
- クエリに
COUNT()
関数を含めることはできません - すべてのクエリには
LIMIT
最大値を含める必要があります100
- 列数は次の数を超えることはできません
5
- プライバシー リージョンが原因で、一部のテーブルのデータにアクセスできません。
SELECT
使用できるのはステートメントのみです。
私は今何をしていますか?
これらをフィルタリングするために正規表現を使用しています。また、EXPLAIN または同様のクエリを呼び出して、実行前にデータベースへの影響を判断することも計画しています。
正規表現よりも良い方法はありますか? data.SE ではどのように行われますか? 他に心配すべきことはありますか?
更新 1
これら 2 つのルールは、データベース サーバーでユーザー権限を制限することで適用できます。
- プライバシー リージョンが原因で、一部のテーブルのデータにアクセスできません。
SELECT
使用できるのはステートメントのみです。
したがって、唯一の問題はSQLを検証することです
更新 2
私がSQLパーサーを書けば、それでうまくいくことはわかっています。JS インタープリターを書くことはeval()
、その悪い習慣として単に削除するようなものです。そのため、SQL パーサーをゼロから作成することは、実際には選択肢ではありません。ここ。