説明
SQL Server の user options は、新しい接続のセッション既定オプションを指定するビットマスクです。0 以外の値が危険な権限付与を意味するわけではなく、例の 32 は ANSI_NULLS を指定します。
セッションは SET 文で変更でき、既存の接続にはサーバー既定値の変更が直ちに反映されません。不適切な既定値は、クエリの動作やデータ処理の結果を変える場合があります。
想定される影響
- 予期しない NULL 比較などのセッション動作が、アプリケーションのエラーにつながる場合があります。
- 一律に初期化すると、特定のオプションに依存するワークロードが停止するおそれがあります。
対処方法
user optionsの各ビットと、アプリケーションが指定するセッションオプションを確認してください。不要な全体の既定値だけを除き、0 をすべての環境に必要なセキュリティ修正としないでください。- 新しい接続で実際のオプションとクエリ結果をテストし、接続プールの更新と切り戻しを計画してください。
例
インスタンス設定の一部を比較する例です。サポートされるエンジンバージョンと SQL Server 用のマシンタイプを使い、var.sql_server_tier と省略した必須入力を指定してください。このフラグ変更に、例にあるエンジンバージョンの変更が必要なわけではありません。
変更前
hcl
resource "google_sql_database_instance" "db" {
name = "sqlserver-instance"
database_version = "SQLSERVER_2017_EXPRESS"
region = "us-central1"
settings {
database_flags {
name = "user options"
value = "32"
}
}
}
変更後
hcl
resource "google_sql_database_instance" "db" {
name = "sqlserver-instance"
database_version = "SQLSERVER_2019_STANDARD"
region = "us-central1"
settings {
tier = var.sql_server_tier
database_flags {
name = "user options"
value = "0"
}
}
}
補足:
- 変更前: 32 は新しい接続の ANSI_NULLS を既定にします。それ自体でアクセス権限は増えません。
- 変更後: 0 では追加の user options ビットを指定しません。必要なセッション動作が維持されるか確認が必要です。