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機能で簡単に検出及び管理する事が可能です。 運用が非常に楽に出来る製品になっていますので、ぜひ興味がある方はお問い合わせお待ちしております。 最後までお読みいただきありがとうございました。この記事が皆さんの役に立てば幸いです。
CSPMについてはこちらで解説しております。併せてご覧ください。
            



