私はランダムなSQL文を受け取り、実行結果を返すシステムを持っています。私は、読み取り専用ステートメントを実行し、レコードを更新/挿入/削除するなどのステートメントを拒否するようにシステムを制限したいと考えています。文を実行する前に文を更新するかどうかをチェックする
ステートメントが実際に実行されていない読み取り専用ステートメントであるかどうかを確認する方法はありますか?
注:
- システムはとにかくデータベースへのフルアクセス権を持っているいくつかの「信頼できる」ユーザーのみアクセス可能です - ので、私が欲しいのは「おっと」安全策である - 私はこれがあることを理解SQLインジェクション攻撃などを処理する方法ではありません。
正規表現の検証はおそらくあまりにも複雑です。たとえば、コメントや列名に「禁止された単語」が含まれていればOKです。
は、これは有効な入力する必要があります:SELECT a AS update_value, 'INSERT FOR FUN' AS q FROM t --comment: should we delete stuff? /*why not as long as you don't drop database*/
しかし、これは拒否されなければならない:
UPDATE t SET a = 1
- が、私はむしろ、私がいることを信じている
これを防ぐために、読み取り専用ユーザを作成するのは**唯一の**安全な方法です。代わりはありません。 –
ユーザは任意のアドホッククエリを実行できますか?許可は 'SELECT'だけに制限してください。 –
@a_horse_with_no_nameそれは私が得ることを望んでいた答えです - それを投稿しても構いません。 – assylias