説明
MySQL の local_infile は、クライアントが読み取れるファイルをサーバーへ転送する LOAD DATA LOCAL に関する設定です。利用にはサーバーとクライアントの両方での許可が必要で、SQL 権限やクライアントプロセスのファイルアクセス権限にも依存します。
データベースサーバー上の任意のファイルを読む機能とは異なります。特に、信頼できないサーバーに接続するクライアントは、意図しないファイル転送要求を受け取る可能性があります。
想定される影響
- クライアントが読み取れる機密ファイルがサーバーへ送られるおそれがあります。
- 不要なファイル取り込み機能が、アプリケーションへの攻撃経路を増やす可能性があります。
対処方法
- 業務上不要なら
databaseFlagsのlocal_infileをoffにし、クライアント側の LOCAL 機能も制限してください。 - 必要な場合は信頼できるサーバーにだけ接続し、読み取れるファイルと SQL 権限を最小限にしてください。
- 必要な他のフラグを維持して変更し、実際の設定と必要な取り込み処理を確認してください。
例
Deployment Manager のサポートは終了しています。次の例は従来の MySQL 5.7 設定の抜粋です。使用するエンジンのサポート状況と更新計画を確認し、tier、リージョンなどの必要な設定はサポートされる管理ツールで用意してください。
変更前
yaml
resources:
- name: db-instance
type: sqladmin.v1beta4.instance
properties:
databaseVersion: MYSQL_5_7
settings:
databaseFlags:
- name: local_infile
value: "on"
サーバーで local_infile を許可しています。ファイル転送にはクライアントの対応と権限も必要です。
変更後
yaml
resources:
- name: db-instance
type: sqladmin.v1beta4.instance
properties:
databaseVersion: MYSQL_5_7
settings:
databaseFlags:
- name: local_infile
value: "off"
サーバー側で LOCAL ファイル読み込みを無効にします。クライアント設定や他のデータ取り込み経路も別途確認してください。