3

クライアント アプリケーションがデータベースに対して SQL クエリを実行できるようにしたいと考えています。

クエリはデータのリクエストであり、クライアントはデータを変更できません。

クライアントが SQL ステートメントを送信し、悪意のあるインジェクションをスクリーニングしてから、データベースを通過させる方法はありますか?

PostgreSQL データベースに対して Python 用の SQLAlchemy ライブラリを使用しています。

ありがとう!

4

3 に答える 3

4

悪意のあるクエリを解釈しようとするよりも簡単なオプションは、読み取り専用権限を持つ db ユーザーを作成することです。その後、エンドユーザーはそのアカウントを使用して SELECT クエリを実行します。「書き込み」クエリが許可されないため、悪意のある挿入や削除について心配する必要はありません。クライアントに見せたくないデータへのアクセスを許可しないように、アクセス許可をさらに変更することもできます。

「読み取り専用」ユーザーの作成に関する情報については、このSO の質問と回答を参照してください。

于 2013-01-13T16:42:24.100 に答える
1

sqlalchemy.sql.expression.textメソッドを使用してSQLクエリを実行するときに準備済みステートメントを使用する

from sqlalchemy.sql.expression import text

t = text("SELECT * FROM users WHERE id=:user_id")
result = connection.execute(t, user_id=12)

メソッドの完全なカバレッジについては、 sqlalchemy のドキュメントを参照してくださいtext

しかし、ユーザー定義の SQL ステートメントからアプリケーションを保護することは、DBA ブロックがユーザーからのロールの作成と書き込みをブロックしたとしても、非常に困難です。開始する前に、このブログ投稿を読むことを検討してください。

于 2013-01-13T17:03:00.557 に答える