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の場合)

コンソールでの修復手順

  1. Cloud Consoleにアクセス
  2. 対象インスタンスを選択
    • SQL Serverインスタンス名をクリックします
  3. 現在の設定を確認
    • 概要ページの「構成」セクションを確認します
    • 「データベースフラグ」に「user options」エントリがあるか確認します
  4. インスタンスを編集
    • インスタンスの概要ページで「編集」ボタンをクリックします
  5. user optionsフラグを削除
    • 「user options」フラグが存在する場合、そデフォルト値(0)にします
  6. 変更を保存
    • ページ下部の「保存」をクリックします
    • 警告:インスタンスの再起動が必要な場合があります
  7. 変更を確認
    • 概要ページに戻ります
    • 「データベースフラグ」に「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機能で簡単に検出及び管理する事が可能です。 運用が非常に楽に出来る製品になっていますので、ぜひ興味がある方はお問い合わせお待ちしております。 最後までお読みいただきありがとうございました。この記事が皆さんの役に立てば幸いです。

参考情報

この記事をシェアする

クラウドセキュリティ対策実践集一覧へ戻る

貴社の利用状況に合わせた見積もりを作成します。

料金プランを詳しく見る