Cloud SQL SQL Server のデータベース間所有権チェーンの確認

不要なデータベース間所有権チェーンを無効にし、明示的な権限でアクセスを限定してください。

説明

cross db ownership chaining は、必要な条件を満たすデータベース間の所有権チェーンを許可します。参照元と参照先のオブジェクトの所有者が同じでチェーンが適用される場合、参照先の権限確認が省略され、意図しないデータアクセスにつながるおそれがあります。

Cloud SQL はすべての SQL Server バージョンでこのフラグを非推奨とし、新たに on に設定することを許可していません。既存インスタンスでこのフラグが有効な場合は、依存関係を確認したうえで、フラグを削除するか off に変更する必要があります。

想定される影響

  • 一つのデータベースのオブジェクトを変更できるユーザーが、別のデータベースのデータに意図せずアクセスするおそれがあります。
  • 依存する処理を確認せず無効にすると、データベース間の操作が失敗する場合があります。

対処方法

  • 既存の cross db ownership chaining を削除または off にする前に、データベース間の呼び出しと所有権を確認してください。
  • 必要なアクセスは明示的な最小権限や署名付きストアドプロシージャなどのサポートされる方式で設定し、正常な処理と不要なアクセスの拒否をテストしてください。

例

インスタンス設定の一部を比較する例です。サポートされるエンジンバージョンと SQL Server 用のマシンタイプを使い、var.sql_server_tier と省略した必須入力を指定してください。このフラグ変更に、例にあるエンジンバージョンの変更が必要なわけではありません。 変更前の on は過去の構成であり、現在の新規インスタンスに適用する設定ではありません。

変更前

hcl
resource "google_sql_database_instance" "db" {
  name             = "sqlserver-instance"
  database_version = "SQLSERVER_2017_EXPRESS"
  region           = "us-central1"

  settings {
    database_flags {
      name  = "cross db ownership chaining"
      value = "on"
    }
  }
}

変更後

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  = "cross db ownership chaining"
      value = "off"
    }
  }
}

補足:

  • 変更前: 過去のデータベース間所有権チェーンが有効な構成です。すべてのデータベースへの無条件の許可ではありません。
  • 変更後: フラグを無効にします。必要なデータベース間操作には適切な権限設定が必要です。

参考資料