Cloud SQL SQL Serverのuser options設定によるグローバル設定変更リスクを防ぐ手順について

このブログシリーズ 「クラウドセキュリティ 実践集」 では、一般的なセキュリティ課題を取り上げ、「なぜ危険なのか?」 というリスクの解説から、「どうやって直すのか?」 という具体的な修復手順(コンソール、gcloud CLI、Terraformなど)まで、分かりやすく解説します。
この記事では、Cloud SQLのSQL Serverインスタンスでuser options設定が有効な状態となっている問題について、リスクと対策を解説します。

ポリシーの説明
user optionsはSQL Serverのサーバーレベル設定で、全データベースユーザーに対するグローバルなクエリ処理オプションのデフォルト値を指定します。この設定はsp_configure
システムストアドプロシージャを使用して構成され、ユーザーのワークセッション中のSETオプションに影響を与えます。
user optionsは16ビットのビットマップとして格納され、各ビットが特定のSETオプション(ANSI_NULLS、ANSI_WARNINGS、IMPLICIT_TRANSACTIONSなど)を表します。デフォルト値は0で、すべてのオプションがOFFの状態です。
修復方法
gcloud CLIでの修復手順
gcloud CLIを使用してuser options設定を無効化する手順:
# 1. 現在のフラグ設定を確認
gcloud sql instances describe [INSTANCE_NAME] \
--format="table(settings.databaseFlags[].name,settings.databaseFlags[].value)"
# 2. user optionsフラグを削除または0に設定
# オプション1: フラグを明示的に0に設定
gcloud sql instances patch [INSTANCE_NAME] \
--database-flags=^:^user_options=0
# オプション2: 他のフラグは維持しつつuser optionsのみ削除
# 現在設定されているフラグを取得(user options以外)
CURRENT_FLAGS=$(gcloud sql instances describe [INSTANCE_NAME] \
--format="value(settings.databaseFlags[].name,settings.databaseFlags[].value)" | \
grep -v "user options" | \
awk '{printf "%s=%s:", $1, $2}' | sed 's/:$//')
# フラグを更新
if [ -z "$CURRENT_FLAGS" ]; then
# 他にフラグがない場合は、フラグをクリア
gcloud sql instances patch [INSTANCE_NAME] --clear-database-flags
else
# 他のフラグを維持して更新
gcloud sql instances patch [INSTANCE_NAME] \
--database-flags="^:^${CURRENT_FLAGS}"
fi
# 3. 変更を確認
gcloud sql instances describe [INSTANCE_NAME] \
--format="table(settings.databaseFlags[].name,settings.databaseFlags[].value)" | \
grep -i "user options"
# 何も表示されない、または値が0であることを確認
注意:
[INSTANCE_NAME]
を実際のインスタンス名に置き換えてください- フラグの変更によりインスタンスが再起動される場合があります
^:^
はフラグのセパレータです(bashの場合)
コンソールでの修復手順
- Cloud Consoleにアクセス
- Cloud SQLインスタンス にアクセスします
- 対象インスタンスを選択
- SQL Serverインスタンス名をクリックします
- 現在の設定を確認
- 概要ページの「構成」セクションを確認します
- 「データベースフラグ」に「user options」エントリがあるか確認します
- インスタンスを編集
- インスタンスの概要ページで「編集」ボタンをクリックします
- user optionsフラグを削除
- 「user options」フラグが存在する場合、そデフォルト値(0)にします
- 変更を保存
- ページ下部の「保存」をクリックします
- 警告:インスタンスの再起動が必要な場合があります
- 変更を確認
- 概要ページに戻ります
- 「データベースフラグ」に「user options」がリストされていないことを確認します
Terraformでの修復手順
Cloud SQLのSQL Serverインスタンスでuser options設定を無効化するTerraformコードです。
# アプローチ1: 明示的にデフォルト値に設定
resource "google_sql_database_instance" "sqlserver_instance" {
>>> skip
settings {
# user optionsを明示的に0(無効/デフォルト)に設定
database_flags {
name = "user options"
value = "0"
}
}
}
最後に
この記事では、Cloud SQLのSQL Serverインスタンスでuser options設定を無効化する方法について、リスクと対策を解説しました。
この問題の検出は弊社が提供するSecurifyのCSPM機能で簡単に検出及び管理する事が可能です。 運用が非常に楽に出来る製品になっていますので、ぜひ興味がある方はお問い合わせお待ちしております。 最後までお読みいただきありがとうございました。この記事が皆さんの役に立てば幸いです。