説明
MySQL の skip_show_database が off の場合、ユーザーは SHOW DATABASES を実行できますが、表示されるデータベースは権限によって制限されます。この設定だけですべての名前やデータが公開されるわけではありません。
on の場合は SHOW DATABASES 権限を持つユーザーだけが実行できます。この権限があれば一覧全体を参照できるため、付与先も併せて確認する必要があります。
想定される影響
- 不要なデータベース名の開示が、内部構造の把握に利用されるおそれがあります。
- 一覧参照を一律に制限すると、依存する管理ツールが動かなくなる場合があります。
対処方法
- 一般アカウントの一覧参照を制限する必要がある場合は
skip_show_databaseをonにし、SHOW DATABASESや広範なグローバル権限の付与先を最小限にしてください。 - 変更前に管理ツールとアプリケーションの依存関係を確認し、必要な参照をテストしてください。実データへのアクセス権限も別途制限してください。
例
インスタンス設定の一部を示す例です。サポートされるエンジンバージョンとマシンタイプを選び、省略した必須設定を用意してください。
変更前
hcl
resource "google_sql_database_instance" "db" {
name = "mysql-instance"
database_version = "MYSQL_8_0"
region = "us-central1"
settings {
database_flags {
name = "skip_show_database"
value = "off"
}
}
}
変更後
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 = "skip_show_database"
value = "on"
}
}
}
補足:
- 変更前: コマンドの実行を許可します。表示される名前はユーザーの権限に依存します。
- 変更後: 実行に SHOW DATABASES 権限を要求します。その権限の付与範囲も確認が必要です。