MySQL 3.23.49 および MySQL 4.0.2(Windows では
4.0.13)で、LOAD DATA LOCAL
に関するセキュリティ対策としていくつかの新しいオプションが追加されました。
このコマンドには次のような潜在的な問題が 2 つあります。
ファイルの読み取りがサーバ側から開始されるため、理論的には、改悪した MySQL サーバを作成しておけば、クライアントがテーブルに対してクエリを実行した時に、そのクライアントコンピュータ上に存在する全てのファイル(カレントユーザが読み取り権を持つ)を、改悪した MySQL サーバが読み取れるということになります。
クライアントが Web サーバから接続する Web
環境では、ユーザは LOAD DATA LOCAL
を使用して、Web
サーバプロセスが読み取りアクセス権を持つどのファイルでも読み取ることができます(ユーザが
SQL
サーバに対してすべてのコマンドを実行できる場合)。
これには 2 つの解決方法があります。
MySQL を --enable-local-infile
でコンフィギャしていなければ、mysql_options(...
MYSQL_OPT_LOCAL_INFILE, 0)
を呼び出さないクライアントは LOAD DATA
LOCAL
を使用できません。 See
項11.1.3.40. 「mysql_options()
」。
mysql
コマンドラインクライアントに対しては、--local-infile[=1]
オプションで LOAD DATA LOCAL
を有効にでき、--local-infile=0
オプションで無効にできます。
デフォルトでは、すべての MySQL
クライアントとライブラリが
--enable-local-infile
でコンパイルされ、MySQL 3.23.48
以前との互換性が保たれるようになっています。
MySQL サーバですべての LOAD DATA
LOCAL
コマンドを無効にするには、mysqld
を --local-infile=0
で開始します。
LOAD DATA LOCAL INFILE
がサーバまたはクライアントで無効になっている場合、次のエラーメッセージ(1148)が表示されます。
The used command is not allowed with this MySQL version
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.