動的SQLとは?どうてきえすきゅーえる
動的SQLとは、SQL文の内容を実行時に文字列として組み立て、PREPAREで解析してからEXECUTEで実行する方式。検索条件の組合せが実行時まで決まらない画面などで使い、翻訳時に文が確定する静的SQLと対になる。文の組み立てに外部入力が直接混ざるとSQLインジェクションの入口になるため、脆弱性の原因側としても問われる。
最終更新:2026-10-06
情報処理安全確保支援士を最短で暗記・合格する →背景
埋込みSQLは本来、翻訳時に文を解析し、実行計画も権限検査も先に確定させる仕組みだった。しかし利用者が条件を自由に選ぶ検索画面では、どの列が条件に入るかが実行時まで決まらず、あらかじめ文を書き切れない。この必要から実行時に文を組み立てる方式が用意されたが、外部入力が文の骨格に混ざり得るという構造そのものが、後にSQLインジェクションの温床になった。
具体例
JavaのJDBCでは、PreparedStatementに「?」のプレースホルダを置き、setStringで値を渡す。文の骨格が先にPREPAREされ、渡した値は文字列としてしか扱われないため、入力に「' OR '1'='1」が来ても命令としては解釈されない。同じ文を繰り返し使う場合は解析結果を保持して値だけ差し替える。
試験での引っ掛け
静的SQLとの違いは「いつ文が確定するか」にある。動的SQLは実行時に決まるため事前の構文検査・権限検査ができず、実行計画も作り直されやすい。またプレースホルダを使っても表名や列名は値ではないためバインドできず、その部分だけは入力を直接連結しない設計が別途必要になる。
関連用語
出典・参考
解説は資格暗記が独自に作成しています。過去問の出典は各問題に記載のとおりです。