📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)

 
812行目: 812行目:
| エラー時の動作 || 即座に停止可能 || 転送開始後は途中停止不可
| エラー時の動作 || 即座に停止可能 || 転送開始後は途中停止不可
|-
|-
| セキュリティ || サーバ側ファイルアクセス権限が必要 || <code>local_infile</code> 設定が必要<br><br>サーバ側で設定する場合は、<u>[mysqld]</u> セクションに <u>local_infile=1</u> を設定する。
| セキュリティ || サーバ側ファイルアクセス権限が必要 || <code>local_infile</code> 設定が必要
|}
|}
</center>
</center>
<br>
<br>
セキュリティ設定の確認と変更方法を以下に示す。<br>
<code>LOAD DATA LOCAL INFILE</code> を使用するには、サーバ側とクライアント側の両方で <code>local_infile</code> を有効化する必要がある。<br>
<br>
<u>※重要</u><br>
<u>MySQL 8.0.20以降では、<code>local_infile</code> はデフォルトで無効化されている。</u><br>
<u>片方でも無効の場合、ERROR 3950 が発生する。</u><br>
<br>
現在の設定値の確認方法を以下に示す。<br>
<br>
<br>
  <syntaxhighlight lang="mysql">
  <syntaxhighlight lang="mysql">
  # local_infile の設定を確認
  # local_infile の設定を確認
  SHOW VARIABLES LIKE 'local_infile';
  SHOW VARIABLES LIKE 'local_infile';
   
  </syntaxhighlight>
  # local_infile を有効化 (サーバ側)
<br>
サーバ側の設定方法を以下に示す。<br>
<br>
<syntaxhighlight lang="mysql">
  # 方法1 : 実行時に動的変更
  SET GLOBAL local_infile = 1;
  SET GLOBAL local_infile = 1;
  </syntaxhighlight>
  </syntaxhighlight>
<br>
<br>
<u>※重要</u><br>
<syntaxhighlight lang="ini">
<u>MySQL 8.0以降では、local_infile はデフォルトで無効化されている。</u><br>
# 方法2 : my.cnf (永続設定)
<u>セキュリティリスクを理解した上で使用する必要がある。</u><br>
[mysqld]
local_infile=1
</syntaxhighlight>
<br>
クライアント側の設定方法を以下に示す。<br>
<br>
<syntaxhighlight lang="bash">
# 方法1: mysqlコマンドラインクライアントのオプション
mysql --local-infile=1 -u user -p database
</syntaxhighlight>
<br>
<syntaxhighlight lang="ini">
# 方法2: my.cnf (永続設定)
[client]
loose-local-infile=1
</syntaxhighlight>
<br>
MySQL 8.0.21以降では、<code>--load-data-local-dir</code> オプションを使用して、読み込み可能なファイルを特定のディレクトリに制限できる。<br>
<br>
<syntaxhighlight lang="bash">
# 特定ディレクトリからのみロードを許可
mysql --local-infile=0 --load-data-local-dir=/my/local/data -u user -p database
</syntaxhighlight>
<br>
<u>※注意</u><br>
<u>LOAD DATA LOCAL INFILE はセキュリティリスクを伴う。</u><br>
<u>悪意のあるサーバーがクライアントの任意のファイルにアクセスする可能性があるため、信頼できる接続先でのみ使用すること。</u><br>
<br>
<br>