web-dev-qa-db-ja.com

アテナで名前付きクエリを実行する

javascript sdk by aws を使用して、Athenaでパラメーター化されたクエリを実行します。

Athenaの名前付きクエリがその方法かもしれませんが、ドキュメントはこれを行う方法を理解するのに非常にわかりにくいようです。

誰かが私たちが次のことをするのを手伝ってくれるといいですね

  • アテナでSQLインジェクションを回避するための推奨される方法は何ですか?
  • SELECT c FROM Country c WHERE c.name = :nameのようなパラメータ化されたクエリを作成します
  • nameパラメータの値を渡します
  • このクエリを実行します
14
Jugal Thakkar

名前付きクエリはAthenaの奇妙な機能であり、残念ながら実際には何の役にも立ちません。

Athenaは、多くのRDBMSのようなプリペアドステートメントをサポートしていません。クライアント側でパラメータ拡張をサポートするSQLライブラリがあります– Rubyの続編は私が経験したものですが、残念ながらJavaScriptの提案はできません。

ただし、AthenaのSQL方言でのエスケープはそれほど複雑ではありません。識別子では二重引用符を2つの二重引用符としてエスケープする必要があり、リテラル文字列では一重引用符を一重引用符としてエスケープする必要があります。他のデータ型はクリーンである必要があります。整数の場合は数字のみ。

また、Athenaでは、SQLインジェクションの危険性がRDBMSの場合とは異なることに注意してください。Athenaはデータを削除できません。 IAM権限を正しく設定すると、ユーザーはテーブルを削除することもできなくなります。また、何らかの理由でテーブルの削除が許可されているユーザーでクエリを実行した場合でも、テーブルは単なるメタデータであり、簡単に再設定できます。

4
Theo