文系プログラマによるTIPSブログスマートフォン用の表示で見る文系プログラマによるTIPSブログ文系プログラマ脳の私が開発現場で学んだ事やプログラミングのTIPSをまとめています。DATA等の特殊なDMLを実行したかったり、複数行のSQLを1定義で実行したい時って結構あったりしますよね。今回はそれに対応してみます。情報のおさらい解説の前に情報が混乱しないよういくつか整理しておきます。LOCAL」使用する事になります。DATAはオプション未設定では実行できなくなったdev.mysql.comいろいろ書かれていますが、要は以下です。今まで認可処理が無かったから、参照権限さえ持っていればリモートのファイルを読み取れて危なかったぞ。LOCALを許可するオプションを付けないと実行できないようにしたぞ。version」エラーを返すぞ。サーバ側の設定としては、サーバ側のmy.cnfに「local-infile=1」を設定します。DB名」というようにオプション設定して接続します。ここで一つ問題が生じます。DATAする場合に「--local-infile=1」を指定するにはどうするか?という問題が起きます。DATAするには?という事ですね。LOCALを実行した場合のStackTraceの一部です。com.mysql.cj.jdbc.ClientPreparedStatement.execute(ClientPreparedStatement.java:372)エラーのポイントは「ClientPreparedStatement.execute」でしょうか。「クライアント側でPreparedStatementを実行しようとして失敗した」と言っているわけです。これが正に「--local-infile=1」オプションが無いから発生したエラーなのです。解決策では解決策を調べていきます。結論から言うと、「MyBatisで対応するのではなくJDBCドライバで対応する」形になります。アプリケーションからはJDBCドライバを使用してMySQLサーバに接続しており、mysqlクライアントを介していません。従って、JDBCドライバで何とかするしかありません。setLocalInfileInputStreamを使うgithub.comピンポイントでいきなりメソッドが出てきましたが、要はこれが使われれば、「--local-infile=1」を指定したのと同じ状態でMySQLサーバに接続した事になります。このご時世、直接JDBCドライバのメソッドを呼びたくありません。対応するJDBCのオプションが有るJDBCドライバにはズバリそれに該当するオプションがあるのです。DATAをファイルパス指定する場合は「allowLoadLocalInfile」を、URL指定する場合は「allowUrlInLocalInfile」を有効にするだけで対応できます。このオプションは以下のようにURL属性で指定します。INFILEを実行できるようになります。allowLoadLocalInfileは何故デフォルト値がfalseで無効なのか?と一瞬思いますが、冒頭のMySQLの公式リファレンスのセキュリティ問題に合わせ、初期値は無効にしていると思われます。おまけMyBatisのmapperのxml内で複数のステートメントを記述したい例えば以下のようにセミコロンが複数ある、つまり複数ステートメントをMyBatisのmapperのxmlで、1度のSQLで実行してみます。</select></mapper>すると以下のエラーが発生します。com.mysql.cj.jdbc.ClientPreparedStatement.execute(ClientPreparedStatement.java:372)これもJDBCドライバのオプションが問題で、「allowMultiQueries」の初期値がfalseなので、シンタックスエラー扱いになっています。3.1.1allowMultiQueries=trueをJDBCドライバのURLに指定すれば複数ステートメントの実行は可能になります。これを有効にすると、SQLインジェクションを行う際に複数ステートメントが実行できてしまい、最悪沢山の攻撃を1度に受けてしまう可能性があります。error扱いにする事ができ、多少安全になります。複数ステートメントを許可してしまうと、便利だからと使いがちになり、1定義の責務を増やしてしまうのと同時に共通化の妨げにもなります。以上を考慮したうえでallowMultiQueriesを有効にするか決めたいですね。雑感この問題は他のORMを使っても起き得る問題なので、覚えておくと便利そうです。DATAとトランザクション:まとめ知っておいた方がいいかもしれません。週間)昔は業務系SIer、今はベンチャー企業でプログラムを書いています。INFILEを実行できるようにするmacのAutomatorでhomebrewのコマンドをFinderのサービスから実行できるようにするReactオススメ書籍React自体の基礎、AtomicDesignの適用、CSSの運用手法の歴史的な経緯とメリットデメリット、Reduxの基礎、redux-sagaによる非同期処理、サーバサイドレンダリング、テスト、lint、を学ぶ事ができます。単行本(ソフトカバー)この商品を含むブログを見るAngularオススメ書籍Angularを学ぶなら絶対以下がおすすめです!バインディング、ディレクティブ、パイプ、フォーム、コンポーネント、サービス、ルーティング、httpClientによる非同期httpリクエスト、テスト、angular-cli、を非常に丁寧な説明で網羅的に解説しています。大型本この商品を含むブログを見るSEOオススメ書籍SEOを学ぶなら絶対以下がおすすめです!クローラに対して何をどうすればサイトの巡回効率・速度を上げる事ができるのか、どういったマークアップをする事が標準仕様なのか。巷に溢れる業者による経験則に基づくオレオレSEO情報は一切無く、全てGoogle等のオフィシャルな情報に基づいて何をすべきか、どんな手段があるのかを解説されています。プログラマな私が業務で行った施策が多く書かれており、プログラマ寄りで高度な内容となっており、巷のビギナー向けの曖昧な情報集とは一線を画しています。Amazonアソシエイト・プログラムの参加者です。reserved.スターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。