クライアント アプリケーションがデータベースに対して SQL クエリを実行できるようにしたいと考えています。
クエリはデータのリクエストであり、クライアントはデータを変更できません。
クライアントが SQL ステートメントを送信し、悪意のあるインジェクションをスクリーニングしてから、データベースを通過させる方法はありますか?
PostgreSQL データベースに対して Python 用の SQLAlchemy ライブラリを使用しています。
ありがとう!
クライアント アプリケーションがデータベースに対して SQL クエリを実行できるようにしたいと考えています。
クエリはデータのリクエストであり、クライアントはデータを変更できません。
クライアントが SQL ステートメントを送信し、悪意のあるインジェクションをスクリーニングしてから、データベースを通過させる方法はありますか?
PostgreSQL データベースに対して Python 用の SQLAlchemy ライブラリを使用しています。
ありがとう!
悪意のあるクエリを解釈しようとするよりも簡単なオプションは、読み取り専用権限を持つ db ユーザーを作成することです。その後、エンドユーザーはそのアカウントを使用して SELECT クエリを実行します。「書き込み」クエリが許可されないため、悪意のある挿入や削除について心配する必要はありません。クライアントに見せたくないデータへのアクセスを許可しないように、アクセス許可をさらに変更することもできます。
「読み取り専用」ユーザーの作成に関する情報については、このSO の質問と回答を参照してください。
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 ブロックがユーザーからのロールの作成と書き込みをブロックしたとしても、非常に困難です。開始する前に、このブログ投稿を読むことを検討してください。