2016-08-04 5 views
1

ユーザから直接入力されるSQLクエリを安全に実行する方法があるかどうかを知る必要があります。管理ツールを使用して、管理者は1時間ごとにデータベースに対してSQLクエリを実行することによって、主要なパフォーマンス指標を作成できます。問題は、このプロセスが明らかにユーザーエラーや悪意のあるユーザーによる悪い事態に敏感であることです(ユーザーがこのクエリのテーブルからデータを簡単に削除できるなど)。私はこれらのステートメントを実行する安全な方法があるのか​​、あらかじめ何をするのかを知っているかどうか疑問に思っています。ユーザが作成したSQLクエリを実行する

1つの提案では、トランザクション内でSQLを実行し、そのたびにトランザクションをロールバックします。これはまともな解決策ですか?

+0

これは完全に安全な方法ではありません。ユーザーに各コマンドを実行する権限を与えることができます(ユーザーが特定のテーブルからINSERTとSELECTを実行できるとします) PostgreSQLがthisのようなものをサポートしているかどうかわかりません。これを行う別の方法は、ユーザーからのSQLクエリを受け取り、分析し、承認している場合は実行し、フォワードするサーバーアプリケーションを作成することですユーザーへのクエリ – null

+0

ストアドプロシージャを実行します。https://msdn.microsoft.com/en-us/library/ms189915.aspx – jdweng

答えて

2

いくつかのメソッド...

彼らに自分のレポートを設計するためにいくつかの機能を提供しますBIツールを検索します。それをサポートするためにキューブを構築してください(BIツールはより有害なクエリを防止し、DBの設定に応じてクエリを組み立てることも保証します)

クエリを文字列として保存し、部分文字列関数は、削除、削除、更新、または悪意のあると思われるその他のキーワードを検索します。これは、文字列検索が決して楽しいものではないので、あなたのための難しい作業方法のようです。

最後に...アクセス許可が機能し、読み込み専用にしてください。私はあなたがこれを言い張っている方法では何もしない、奇妙な感じを持っています。

最後のコメントとして、削除や更新が危険な場合は、恐ろしく設計された選択ステートメントにも注意する必要があります。 tbl1、tbl2、tbl3、tbl4、tbl5などから*を選択してください。あなたのデータベースをロックし、それが持っているすべてのリソースを消費することができます。

2

さらにいくつかの提案

クエリ内のDDLコマンドの1.Searchと、彼らは
2.Tryは選択のみ付与することによって、アクセス権を制限する存在する場合は、クエリを拒否した場合、クエリを与えた可能
3.Logクエリとユーザ法医学的分析のために役立つでしょう

2

あなたの最良の賭けのような音は、限られたアクセス権を持つユーザ(すなわち、読取り専用ユーザ)によって実行されるように思われるかもしれません。この回答に似た何か:How to grant users read-only access to all databases

関連する問題