説明
MySQL の local_infile は、LOAD DATA LOCAL によってクライアント側のファイルをサーバーへ転送する機能に関係します。サーバーとクライアントの双方で許可が必要であり、実行プロセスのファイルアクセス権限と SQL 権限も適用されます。
信頼できないサーバーが、クライアントに意図しないファイル転送を要求する場合があるため、必要な接続とクライアントに限定する必要があります。サーバー上のファイルを読む機能とは異なります。
想定される影響
- クライアントプロセスが読めるファイルが、意図せず転送されるおそれがあります。
- 一律に無効化すると、正当なファイル読み込み処理が失敗する場合があります。
対処方法
- ローカルファイル読み込みが不要なら
local_infileをoffにし、クライアント側の LOCAL 機能も無効にしてください。 - 必要な場合は信頼するサーバーの身元を検証し、クライアントのファイルアクセスと SQL 権限を最小限にしてください。変更後は必要な読み込み処理をテストしてください。
例
インスタンス設定の一部を示す例です。サポートされるエンジンバージョンとマシンタイプを選び、省略した必須設定を用意してください。
変更前
hcl
resource "google_sql_database_instance" "db" {
name = "mysql-instance"
database_version = "MYSQL_8_0"
region = "us-central1"
settings {
database_flags {
name = "local_infile"
value = "on"
}
}
}
変更後
hcl
resource "google_sql_database_instance" "db" {
name = "mysql-instance"
database_version = "MYSQL_8_0"
region = "us-central1"
settings {
tier = "db-f1-micro"
database_flags {
name = "local_infile"
value = "off"
}
}
}
補足:
- 変更前: サーバーでローカルファイル読み込みを許可します。利用にはクライアント設定と権限も必要です。
- 変更後: サーバー側のローカル読み込みを無効にします。他のファイルアクセス権限を削除するものではありません。