エスケープと動的参照
パラメータのエスケープ処理と動的なテーブル・カラムの参照方法
パラメータのコンテキストに基づいてSQLインジェクション保護と値のエスケープを処理します。この仕組みはセキュリティを担保するだけでなく、テーブル名やカラム名などの動的な識別子の生成も可能にします。
パラメータのエスケープ処理
1. 通常のコンテキストでの文字列パラメータ
パラメータは文字列としてエスケープされて展開されます
エスケープ処理は、選択されているコネクションのSQL文法に従って行われます
2. 引用符付きコンテキストでの文字列パラメータ
パラメータがダブルクォートやシングルクォートなどの引用符内にある場合、パラメータはその引用符を加味して、元の構文を壊さないようにエスケープされます
エスケープ処理は、選択されているコネクションのSQL文法に従って行われます
3. 日付パラメータの特別処理
通常のコンテキスト: 日付は
YYYY-MM-DD
形式で文字列として展開されますただし、BigQueryのコネクションを利用している場合、バックティック(`)で囲まれた中では
YYYYMMDD
形式(ハイフンなし)に展開されます
4. その他のパラメータ
数値、真偽値パラメータはエスケープ処理は行われず、そのまま展開されます
動的な参照の生成
パラメータを引用符内に配置することで、テーブル名やカラム名などの識別子を安全に生成することができます
外側の引用符に応じて、構文が壊れないようにエスケープ処理を行いますが、文字列パラメータの値には任意の文字列が指定可能なため、SQLの書き方によっては意図しないテーブルやカラムが参照されてしまう可能性があります。動的に識別子を生成する場合は、プレフィックスやサフィックスを固定する、意図しない値が指定された時にSQLがエラーになるようにSQLを記述する、等の対策を考えてください。
最終更新
役に立ちましたか?